如何在ExtJS6中处理控制器中的body元素事件?

如何在ExtJS6中处理控制器中的body元素事件?,extjs,extjs6,Extjs,Extjs6,我有一个基本网格面板,在其中一列中呈现自定义元素。我试图捕捉这个元素上的点击事件,并在控制器中处理它们 问题是,在监听器中,此指的是窗口,因此我甚至不能触发事件 Ext.define('MyList', { extend: 'Ext.grid.Panel', xtype: 'mylist', controller: 'mylist', listeners: { body: { click: function(e, el){

我有一个基本网格面板,在其中一列中呈现自定义
元素。我试图捕捉这个元素上的点击事件,并在控制器中处理它们

问题是,在监听器
中,此
指的是
窗口
,因此我甚至不能触发事件

Ext.define('MyList', {
    extend: 'Ext.grid.Panel',
    xtype: 'mylist',
    controller: 'mylist',

    listeners: {
        body: {
            click: function(e, el){
                //this.fireEvent('onTagClick');
            },
            delegate: 'span.tag',
            scope: this
        },
    },

    columns: [
        {
            text: 'Name', 
            dataIndex: 'name', 
            renderer: function(value, metaData, record){
                return '<span class="tag">tag</span>' + value;
            }
        },
    ]
});
Ext.define('MyList'{
扩展:“Ext.grid.Panel”,
xtype:“mylist”,
控制器:“mylist”,
听众:{
正文:{
点击:功能(e、el){
//此.firevent('onTagClick');
},
委托:“span.tag”,
范围:本
},
},
栏目:[
{
文本:“名称”,
数据索引:“名称”,
渲染器:函数(值、元数据、记录){
返回'tag'+值;
}
},
]
});

我可以使用
Ext.GlobalEvents.firevent()
触发全局事件,但在重新加载网格后,由于重复事件调用而遇到一些奇怪的问题或bug。我想看看是否有办法避免全局事件。

通过直接从控制器连接侦听器找到了一种解决方案,
将引用控制器,然后:

Ext.define('MyListController', {
    alias: 'controller.mylist',

    init: function(){
        this.getView().on({
            body: {
                click: function(e, el){
                    this.onTagClick(el);
                },
                delegate: 'span.tag',
                scope: this
            },
        });
    },

    onTagClick: function(el) {
        console.log("clicked", el);
    },
});

通过直接从控制器连接侦听器找到了一种解决方案,
将引用控制器,然后:

Ext.define('MyListController', {
    alias: 'controller.mylist',

    init: function(){
        this.getView().on({
            body: {
                click: function(e, el){
                    this.onTagClick(el);
                },
                delegate: 'span.tag',
                scope: this
            },
        });
    },

    onTagClick: function(el) {
        console.log("clicked", el);
    },
});