我试图将ExtJS4应用程序拆分为模块。ExtJS4模块化与独立控制器?
- app
- store
- controller
- model
- view
- module
- m1
- model
- view
- controller
- m2
- model
- ...
的问题是,当我启动应用程序,它的inits M1控制器之一时,控制器不具有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与创建()调用 Ping.js的文件是文件与定义( )调用
- 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
inpu T:
MyController.create();
输出:
constructor
- EDIT3 -
创建时,控制器需要在配置对象的应用程序对象。应用程序对象将自身添加到所有控制器,这些控制器是用手工创建的而不是。它调用如下所示:
Ext.create('App.controller.Users', { application: this, ... });
后来它使用应用程序对象将控制调用重定向到它。
control: function (config) { this.application.control(config) };
因此,我可能会实施一些机制,当我创建它们时,会自动将这些应用程序添加到这些控制器。
你是什么意思'控制器没有控制()功能?你能发布一些你的代码吗? – sha 2012-04-17 17:15:39
错误消息不帮助我。控制被称为这个,但它说这是未定义的...笏?! – 2012-04-18 09:06:06
恭喜发现解决方案!可能它会依靠你的首选方法来组织源代码:)我发现ExtJs依赖于目录结构在几个地方,并决定不发明任何东西,并按照他们的建议组织事情。 – sha 2012-04-18 18:22:25