我正在创建自己的"图书馆"因为我想保持我的代码DRY。我们的想法只是扩展SimpleController并为其发送一个名称,以便它可以一般性地加载已经创建的存储和视图,但在我的控制台中,我收到一条消息,提示nameOfController未定义。
1。)在这个例子中,为什么nameOfController未定义?
2。)我知道如何扩展SimpleController,但是什么时候初始化 nameOfController ?在init()
函数中?是否有一些函数甚至在加载商店之前执行:[]和views:[]?
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: "",
stores: ['MyApp.store.' + this.nameOfController],
views: ['MyApp.view.' + this.nameOfController + '.Index']
编辑:(扩展的例子)
Ext.define('MyApp.controller.Users', {
extend: 'MyApp.controller.SimpleController',
nameOfController: "Users" //I want to this nameOfController
//changes the one in superclass
});
答案 0 :(得分:1)
您可以为控制器定义构造函数。例如:
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: "",
//stores: ['MyApp.store.' + this.nameOfController],
//views: ['MyApp.view.' + this.nameOfController + '.Index']
constructor: function(config) {
var name = config.nameOfController;
config.stores = config.stores || [];
config.views = config.views || [];
config.stores.push('MyApp.store.' + name);
config.views.push('MyApp.view.' + name + '.Index');
this.callParent(arguments);
}
});
答案 1 :(得分:0)
在定义对象时,对象不是this
。
您可以使用匿名自助调用功能:
Ext.define("MyApp.controller.SimpleController",(function(name) {
return {
extend: 'Exp.app.Controller',
nameOfController: name,
stores: ['MyApp.store.'+name],
views: ['MyApp.view.'+name+'.Index']
};
})("Users"));
答案 2 :(得分:0)
这样可行:
var name = "Users";
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: name,
stores: ['MyApp.store.' + name],
views: ['MyApp.view.' + name + '.Index']
});
因此,字符串存储在外部变量中。