使用推荐的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
答案 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');
}