插件中的名称空间像app

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

我动态地注册module/plugin控制器到主应用程序,这是步骤中的问题。

  • 我的主应用程序有一个前缀 - 其控制器“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加载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

    上一篇: Namespaces in plugin like app

    下一篇: Extjs 4, Event handling, scope, custom components