extjs - 菜单点击事件被触发两次。为什么?

时间:2013-10-09 07:05:50

标签: extjs event-handling controller extjs4.2

使用推荐的this.control:构造控制事件的控制器:

Ext.define('Mb.controller.Sav_vpc', {
    extend: 'Ext.app.Controller',
    init: function() {
        console.log('controller.init called');
        this.control({
            '#storeMenu menuitem': {
                click: this.onStoreMenuClicked
            }
        });
    }
});

函数onStoreMenuClicked被调用两次,因为控制器的init方法被调用两次,因此它会侦听两次事件。

但是controller.init()何时被调用?为什么要两次调用?

这是我的application.launch功能:

Ext.define('Mb.Application', {
    extend: 'Ext.app.Application',
    launch: function() {
        console.log('launching app');
        var controller = Mb.app.getController('Name');
            console.log('end launching app');
    });
...

这将在控制台中提供此输出:

controller.init called
launching app
controller.init called
end launching app

1 个答案:

答案 0 :(得分:3)

getController内调用application.launch时,控制器的init方法会再次被调用,即使控制器已经初始化了。

我不知道这是设计还是错误,但我找到了基于recommendations of @AlexTokarev'控制器间通信'的解决方案。

控制器:

Ext.define('Mb.controller.Sav', {
    extend: 'Ext.app.Controller',
    init: function(){
        this.listen({
            controller: {
                '*': {
                    savOnLaunch: this.onUserLoaded
                }
            }
        })
    },

应用程序启动:

Ext.define('Mb.Application', {
    extend: 'Ext.app.Application',
    launch: function() {
        this.fireEvent('savOnLaunch');
    }