Extjs 4-插件类应用程序中的名称空间

Extjs 4-插件类应用程序中的名称空间,extjs,extjs4,extjs-mvc,Extjs,Extjs4,Extjs Mvc,我有一个包含多个模块/插件的模块化应用程序,也可以作为独立应用程序运行 我将模块/插件控制器动态注册到主应用程序,下面是步骤中的问题 我的主应用程序有一个前缀-其控制器“A.controller.AppController” 我的插件有B前缀-它的控制器:B.controller.PortalController 插件控制器代码: Ext.define('B.controller.PortalController', { extend: 'Ext.app.Controller',

我有一个包含多个模块/插件的模块化应用程序,也可以作为独立应用程序运行

我将
模块/插件
控制器动态注册到主应用程序,下面是步骤中的问题

  • 我的主应用程序有一个前缀-其控制器“A.controller.AppController”
  • 我的插件有B前缀-它的控制器:B.controller.PortalController
插件控制器代码:

 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
loades
B.view.portal.MapPanel
,但未加载存储

如果我指定
stores:['Test']
它会尝试加载
A.store.Test
,如果我指定
Test.Test
它什么都不做(比如错误,但是ext-all-debug不会捕获它),如果我指定
stores:['B.store.Test']
它会正确加载它,但现在我必须使用
getBStoreTestStore()
获取将导致大量代码更改的门店参考


如何使控制器加载具有适当前缀的存储?

如果没有覆盖,我认为这是不可能的。更重要的是,对于我的视图,它也不应该工作

ext All debug.js中的所有代码

控制器使用其自己的类名使用适当的前缀正确加载类:

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传入的getStore函数返回应用程序存储:

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
构建类名,这是应用程序名称,因此使用
存储:['Test']
将指向
A.store.Test


我正在考虑写一个覆盖,但我担心它会破坏其他东西。

没有覆盖,我认为这是不可能的。更重要的是,对于我的观点,它也不应该工作

ext All debug.js中的所有代码

控制器使用其自己的类名使用适当的前缀正确加载类:

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传入的getStore函数返回应用程序存储:

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
构建类名,这是应用程序名称,因此使用
存储:['Test']
将指向
A.store.Test

我正在考虑写一个覆盖,但我担心它会破坏其他东西