extjs - ExtJS如何在 Controller 中处理组件的元素相关事件?

标签 extjs extjs4 extjs4.1 extjs-mvc

我有一个Panel,我需要为该面板的元素捕获/处理mouseover event

当前,我通过使用以下监听器扩展ExtJS面板来实现此目的(如here建议):

...

listeners: {
    mouseover : {
        element : 'el',
        fn : function(){
            console.log('captured mouseover');
        }
    }
},

...

可以通过ExtJS controller完成吗?这样我就可以在一个 Controller 中处理事件了吗?

最佳答案

您处在正确的轨道上,但还没有完全到达目标。 Controller 的工作是控制组件而不是元素。如果要使元素的mouseover事件在组件级别可用,只需将其重新激发为独特的“mypanelmouseover”事件,然后在Controller的control()中使用它即可。
干净利落。

编辑:

方法如下:

Ext.define('My.Panel', {
    extend: 'Ext.panel.Panel',

    constructor: function(config) {
        var me = this;

        me.callParent(arguments);

        me.addEvents(
            'mypanelmouseover'
        );
    },

    afterRender: function() {
        var me = this;

        me.callParent();

        // Declarative style with listeners reads better,
        // but this is shorter and does the same
        me.mon(me.getEl(), 'mouseover', function() {
            this.fireEvent('mypanelmouseover')
        }, me);
    }
});

Ext.define('My.Controller', {
    extend: 'Ext.app.Controller',

    init: function() {
        var me = this;

        me.control({
            'panel': {
                mypanelmouseover: me.onMyPanelMouseover
            }
        });
    }
});

希望这可以帮助。主要思想是保持声明性并解耦代码,而不是创建不可读的回调链。一个不错的副作用是,您可以控制一切,并可以决定要重新触发哪些事件以及何时触发,以及如何对它们使用react。

关于extjs - ExtJS如何在 Controller 中处理组件的元素相关事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11937652/

相关文章:

ExtJS 4.1 停止 grid.Panel 关闭

extjs - 如何在 ExtJS 4.1 中销毁商店?

javascript - Sencha-touch : save login/password (save session, 多任务)

extjs - Sencha 错误跟踪器 url

extjs - 如何在ext 4中制作一个完整的模态窗口?

ExtJs 4.1 TreeGrid 通过列标题过滤

javascript - ExtJS 4 更改 pagingtoolbar 中的自定义按钮位置

dom - ExtJS4:查找树节点的 DOM 元素

html - 固定表格td的宽高

javascript - 如何避免对 Extjs 4 中的隐藏字段进行验证