我正在试图弄清楚如何做以下但我有点困惑。我有一个视图,我称之为模块:
Ext.define('MyApp.view.module.Module', {
mixins : {
observable : 'Ext.Util.Observable'
},
constructor : function(){
this.addEvent('clickmodule');
this.mixins.observable.constructor.call(this, config);
this.init();
}
init : Ext.emptyFn
});
此课程扩展:
Ext.define('MyApp.view.module.MyModule', {
extends : 'MyApp.view.module.Module',
alias : 'widget.mymodule',
init : function() {
this.on('clickmodule', function(){
alert('this is always fired so the event works');
}, this)
this.init();
},
runModule : function(){
this.fireEvent('clickmodule');
}
});
所以我有一个基本模块然后我的真实模块,当调用runModule()时,它只会触发我在基类中创建的名为clickmodule的事件。这工作和解雇,我是init()方法中的一个监听器,它监听要触发的事件,它工作,所以我知道它被解雇了。问题是如何让Controlerl听取事件并采取行动?我似乎无法找到这样做的例子?所以例如我在我的控制器中有这个,但不认为它是正确的,我不知道如何做到这一点:
Ext.define('MyApp.controller.Desktop', {
extends : 'Ext.app.Controller',
refs : [
ref : 'module',
selector : 'mymodule'
],
views : ['module.MyModule'],
init : function(){
this.control({
'mymodule' : {
clickmodule : this.onModuleClick
}
});
},
onModuleClick : function(){
alert('this never gets called');
}
});
所以我知道事件被触发了,因为我把一个监听器放在了类中并且它被调用了。但是我没有在控制器中做正确的事情,因为它似乎没有在被解雇时获得事件。我认为在设置this.control时我会遗漏一些东西。
答案 0 :(得分:0)
原来我的MyApp.view.module.Module需要扩展Ext.Component。这是我可以在控制器中触发事件的唯一方法。