Extjs:覆盖特定的侦听器

时间:2014-07-10 07:52:44

标签: extjs extjs4.2

我有一个窗口组件,我正在扩展以创建不同的窗口。现在,close()hide()侦听器功能在整个板上是相同的,但每个实例的afterrender()都会发生变化。

所以我有类似的东西:

Ext.define('abc.xyz.BaseWindow', {
    extend : "Ext.Window",
    listeners: {
        hide: function(el, eOpts){
            console.log('hide');
        },
        close: function(el, eOpts){
            console.log('close');
        }   
    }
});

Ext.define('abc.xyz.MyWindow', {
        extend : "abc.xyz.BaseWindow",
        listeners: {
            afterrender: function(el, eOpts){
                console.log('afterrender');
            }
        }
    });

但是,整个listeners对象被覆盖,hide()close()永远不会被调用。除非在每个扩展窗口中指定hide()close(),否则有什么方法吗?

1 个答案:

答案 0 :(得分:5)

您可以在窗口中定义您的功能,调用它们并在窗口中覆盖它们,如下所示:

Ext.define('abc.xyz.BaseWindow', {
    extend : "Ext.Window",
    onHide: function(){
        console.log('hide');
    },
    onShow: function(el, eOpts){
        console.log('close');
    },
    onAfterRender: function(el, eOpts){
        console.log('first after render');
    },

    initComponent: function () {
        var me = this;

        Ext.applyIf(me, {
            listeners: {
                hide: me.onHide,
                show: me.onShow
                afterrender: me.onAfterRender
            }
        });

        me.callParent(arguments);
    }
});

Ext.define('abc.xyz.MyWindow', {
    extend : "abc.xyz.BaseWindow",
    onAfterRender: function(el, eOpts){
        console.log('second after render');
    }
});

或者,如果你没有在基类中有一个后悔者,你只需添加一个像(在)上的听众,如Evan Trimboli sais

Ext.define('abc.xyz.MyWindow', {
    extend : "abc.xyz.BaseWindow",
    initComponent: function () {
        var me = this;
        me.callParent(arguments);

        me.on('afterrender', function(el, eOpts){
            console.log('second after render');
        });
    }
});