ExtJS4アプリケーションをモジュールに分割しようとしています。
- app
- store
- controller
- model
- view
- module
- m1
- model
- view
- controller
- m2
- model
- ...
問題は、アプリケーションを起動してm1コントローラーの1つを初期化すると、コントローラーにthis.control()関数がないことです。
- 編集 -
コントローラフォルダ内にクラスを定義しました。
Ext.define( 'App.module.ping.controller.Ping', {
extend: 'Ext.app.Controller',
requires: [
'App.module.ping.view.PingPanel'
],
init: function() {
this.control( {
'#app.module.ping': {
render: this.onPanelRendered
}
} );
},
onPanelRendered: function() {
...
}
});
後で電話します
Ext.create('App.module.ping.controller.Ping').init();
しかし、私はこのエラーを受け取ります:
Uncaught TypeError: Cannot call method 'control' of undefined
Ext.define.control./lib/extjs-4.1.0/src/app/Controller.js:414
Ext.define.init./app/module/ping/app/controller/Ping.js:11
Ext.define.init./app/module/ping/app/Module.js:11
(anonymous function)app.js:17
(anonymous function)app.js:35
Module.jsはcreate()呼び出しを含むファイルですPing.jsはdefine()呼び出しを含むファイルです
--edit2--
病理学的例:
入力:
Ext.define( 'MyController', {
extend: 'Ext.app.Controller',
init: function() { console.log('initialized'); }
});
出力:
function constructor() {
return this.constructor.apply(this, arguments);
}
入力:
Ext.create('MyController');
出力:
constructor
入力:
MyController.create();
出力:
constructor
--edit3--
コントローラは、作成時に構成オブジェクトにアプリケーションオブジェクトを必要とします。アプリケーションオブジェクトは、createで手動で作成されていないすべてのコントローラーに自分自身を追加します。それはこのようなものを呼びます:
Ext.create('App.controller.Users', { application: this, ... } );
その後、アプリケーションオブジェクトを使用して、コントロール呼び出しをそのオブジェクトにリダイレクトします。
control: function ( config ) { this.application.control( config ) };
したがって、これらのコントローラーを作成するときに、それらのコントローラーにアプリケーションを自動的に追加するメカニズムを実装する予定です。