4

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
4

1 回答 1

3

当调用getControllerinsideapplication.launch时,控制器的 init 方法被再次调用,即使控制器已经初始化。

我不知道这是设计使然还是某种错误,但我根据@AlexTokarev 'Inter-controller communication' 的建议找到了解决方案。

控制器:

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');
    }
于 2013-10-09T08:32:15.080 回答