ExtJs5 переопределяет потерю слушателей

У меня есть следующее переопределение в myPackageoverrideswindowWindow:

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.вид.авторизоваться.Login ‘работает нормально, событие ‘beforeshow’в переопределении (‘myPackage.окно.Window’) никогда не стреляет.

Если я затем удалить слушателей из ‘ myApp.вид.авторизоваться.Login’, затем событие’ beforeshow ‘в’ myPackage.окно.Window ‘ выстрелит (я все это вижу с консоли.log output).

Чего я не понимаю, так это почему? Я, вероятно, упускаю что-то довольно простое.

Любая помощь в этом очень ценится. Спасибо!

1 ответ

  1. необходимо добавить прослушиватель после инициализации окна.
    Я его еще не тестировал. но я уверен, что это должно решить вашу проблему.

    например:

    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);
        }
    });