Javascript 存储区[]和视图[]中未定义的变量-Ext JS 4.1.1a
我正在创建自己的“库”,因为我想保持代码的干燥。这个想法只是扩展SimpleControl并向它发送一个名称,这样它就可以加载已经创建的存储和视图,但是在我的控制台中,我收到一条消息,即控制器的名称未定义 1.)在本例中,为什么未定义控制器的名称 2.)我知道如何扩展SimpleController,但何时是初始化控件名称的正确时间?在Javascript 存储区[]和视图[]中未定义的变量-Ext JS 4.1.1a,javascript,extjs,Javascript,Extjs,我正在创建自己的“库”,因为我想保持代码的干燥。这个想法只是扩展SimpleControl并向它发送一个名称,这样它就可以加载已经创建的存储和视图,但是在我的控制台中,我收到一条消息,即控制器的名称未定义 1.)在本例中,为什么未定义控制器的名称 2.)我知道如何扩展SimpleController,但何时是初始化控件名称的正确时间?在init()函数中?在加载存储区[]和视图[]之前是否执行了某些函数 Ext.define('MyApp.controller.SimpleController'
init()
函数中?在加载存储区[]和视图[]之前是否执行了某些函数
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: "",
stores: ['MyApp.store.' + this.nameOfController],
views: ['MyApp.view.' + this.nameOfController + '.Index']
编辑:(扩展示例)
在定义对象时,该对象不是
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"));
在定义对象时,该对象不是
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"));
这将有助于:
var name = "Users";
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: name,
stores: ['MyApp.store.' + name],
views: ['MyApp.view.' + name + '.Index']
});
因此,字符串存储在外部变量中。这将起作用:
var name = "Users";
Ext.define('MyApp.controller.SimpleController', {
extend: 'Ext.app.Controller',
nameOfController: name,
stores: ['MyApp.store.' + name],
views: ['MyApp.view.' + name + '.Index']
});
因此,字符串存储在外部变量中。您可以为控制器定义构造函数。例如:
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);
}
});
您可以为控制器定义构造函数。例如:
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);
}
});
表达式
this.nameOfController
立即计算,但“nameOfController”属性仅在计算整个对象文本并创建相应对象后创建。表达式this.nameOfController
立即计算,但“nameOfController”属性属性仅在计算整个对象文本并创建相应的对象之后创建。感谢您的响应。如何将变量nameOfController发送到超类?使用这个。callParent()?我已经编辑了我的问题,如果你看一下,我将不胜感激。@DavorLozic我不明白你的模式。为什么要从用户
中设置SimpleControl
的名称?因为在我的SimpleControl中,所有逻辑都是我想在所有控制器中共享的,但唯一的区别是“名称”。比如说,用户、国家、工人。。。它们都有数据库的CRUD,逻辑在任何地方都是一样的。我想就是这样。:)谢谢你的回复。如何将变量nameOfController发送到超类?使用这个。callParent()?我已经编辑了我的问题,如果你看一下,我将不胜感激。@DavorLozic我不明白你的模式。为什么要从用户
中设置SimpleControl
的名称?因为在我的SimpleControl中,所有逻辑都是我想在所有控制器中共享的,但唯一的区别是“名称”。比如说,用户、国家、工人。。。它们都有数据库的CRUD,逻辑在任何地方都是一样的。我想就是这样。:)谢谢你的回复,但我认为Lolo的解决方案更干净。如果他的解决方案不起作用,我就试试你的。:)谢谢你的回复,但我认为Lolo的解决方案更干净。如果他的解决方案不起作用,我就试试你的。:)谢谢你的回复。这看起来很棒。我试试看谢谢你的回复。这看起来很棒。我试试看