插件中的名称空间像app
我有模块化应用程序,它包含几个模块/插件,也可以作为独立应用程序运行。
我动态地注册module/plugin
控制器到主应用程序,这是步骤中的问题。
代码插件控制器:
Ext.define('B.controller.PortalController', {
extend: 'Ext.app.Controller',
views: [
'portal.MapPanel',
'administration.ConfigPanel',
'administration.ConfigPanelWrapper'
],
//stores:['Test'],
init: function() {
console.log('portal controller init');
//console.log(this.getTestStore());
this.control({
});
}
});
视图用B前缀正确注册, Ext.Loader
加载B.view.portal.MapPanel
但商店未加载。
如果我指定stores:['Test']
它会尝试加载A.store.Test
,如果我指定test.Test
它什么也不做(如错误,但EXT-所有调试不抓住它),如果我指定stores:['B.store.Test']
它正确地加载它,但现在我必须使用getBStoreTestStore()
来获取会导致大量代码更改的商店引用。
如何使控制器加载具有适当前缀的商店?
没有覆盖,我认为这是不可能的。 更重要的是我的看法,它不应该也工作!
来自ext-all-debug.js
所有代码
控制器使用适当的前缀使用自己的类名正确加载classess:
namespace = Ext.Loader.getPrefix(className) || match[1];
namespaceAndModule = namespace + '.' + module + '.'
但是对于每个视图,存储,建模其控制器都会将getter传递名称创建为getStore,getView,getModel函数
if (!this[fn]) {
this[fn] = Ext.Function.pass(this['get' + type], [ref], this);
}
getter函数getter被传入返回应用程序存储区:
getStore: function(name) {
return this.application.getStore(name);
},
应用程序本身使用getModuleClassName来解析类名
getModuleClassName: function(name, module) {
if (name.indexOf('.') !== -1 && (Ext.ClassManager.isCreated(name) || Ext.Loader.isAClassNameWithAKnownPrefix(name))) {
return name;
} else {
return this.name + '.' + module + '.' + name;
}
}
因此,如果存在具有已知前缀的完全限定类名称,则它将仅返回名称,否则将使用应用程序名称this.name
构建类名称,因此使用stores:['Test']
将指向A.store.Test
。
我正在考虑写一个覆盖,但恐怕它会打破其他的东西。
链接地址: http://www.djcxy.com/p/76391.html