ExtJs5覆盖丢失监听器

时间:2016-09-28 15:06:02

标签: extjs5 sencha-cmd

我在myPackage \ overrides \ window \ Window中有以下覆盖:

Ext.define('myPackage.window.Window', {
    override: 'Ext.window.Window',

    listeners: {
        beforeshow: function (window) {
            console.log('before show');
        }
    }
});

然后我使用此代码:

Ext.define('myApp.view.login.Login', {
    extend: 'Ext.window.Window',
    xtype: 'login',

    requires: [
        'myApp.view.login.LoginController',
        'Ext.form.Panel'
    ],

    controller: 'login',

    title: 'Login',

    closable: false,
    autoShow: true,
    resizable: false,

    listeners: {
        show: function() {
            console.log('in show');

        }
    },

    items: {
       ... snipped for brevity; a couple of textfields and a button
       ...
    }
});

问题是,虽然'显示'在myApp.view.login.Login'中的事件工作正常,之前显示'覆盖中的事件(' myPackage.window.Window')永远不会触发。

如果我然后从myApp.view.login.Login'中删除了听众,那么' beforeshow'在myPackage.window.Window' mypackage.window.Window'然后将触发(我可以通过console.log输出看到所有这些)。

我不明白的是,为什么?我可能错过了一些相当简单的东西。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该在初始化窗口后添加侦听器。 我还没有测试过它。但我相信它应该可以解决你的问题。

例如:

Ext.define('myApp.view.login.Login', {
    extend: 'Ext.window.Window',
    xtype: 'login',

    requires: [
        'Ext.form.Panel'
    ],

    title: 'Login',
    width: 300,
    height: 300,
    closable: true,
    autoShow: true,
    resizable: false,
    initComponent: function () {
        var me = this;
        Ext.apply(me, {
            listeners: {
                show: function () {
                    console.log('in show');

                }
            },

            items: [
                {
                    xtype: 'textfield',
                    width: 300
                }
            ]
        });

        me.callParent(arguments);
    }
});