Ext JS глобальный прослушиватель событий не работает правильно - PullRequest
0 голосов
/ 09 января 2020

У меня есть приложение, в котором я могу нажать кнопку. Если щелкнуть, откроется следующее окно - с глобальным слушателем внутри.

Ext.define('Project.view.window.Info', {
extend: 'Ext.window.Window',

layout: 'fit',
constrain: true,


initComponent: function() {
    this.on({
        activate: function() {
            this.getEl().removeCls('window-inactive');
        },
        deactivate: function() {
            this.getEl().addCls('window-inactive');
        },
        show: function() {
            this.removeCls("x-unselectable");
        }
    });

    this.title = 'Information';
    this.items = [{
        border: false,
        autoscroll: 'true',
        items: [{
            xtype: 'panel',
            name: 'moreinformation',
            border: false,
            layout: 'fit',
            bodyPadding: 20,
            html: this.updateInfo()
        }]
    }];
    this.buttons = [{
        text: 'close',
        scope: this,
        handler: this.close
    }];
    this.callParent(arguments);
    var me = this;

    Ext.on('translated', function() {
            me.down('panel[name=moreinformation]').setHtml(me.updateInfo());
    });
},

updateInfo: function() {
    return '<p>'
            + 'Update text'
            + '<br /><b>'
            + ....
            + '</p>';
}

});

В приложении у меня есть еще одна кнопка «перевести». При нажатии этой кнопки некоторый текст будет переведен даже в окно выше.

Если я переключаю кнопку перевода, все работает нормально. Теперь я открываю окно «Информация» и снова закрываю его. Если я сейчас нажму кнопку перевода, тогда код

Ext.on('translated', function() {
        me.down('panel[name=moreinformation]').setHtml(me.updateInfo());
});

выдаст ошибку, хотя информационное окно закрыто. Я не понимаю этого. Почему приложение запускается в этом коде?

1 Ответ

0 голосов
/ 09 января 2020

Это случается, глобальное событие becose не уничтожается, когда вы уничтожаете ваш компонент. Вы должны сделать это вручную с помощью справочного метода un , в destroy обработчике вашего окна

...