私は次の方法を理解しようとしていますが、少し混乱しています。私はモジュールと呼ぶビューを持っています:
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を設定するときに何かが足りないと思います。