【问题标题】:Extjs 4 - Namespaces in plugin like appExtjs 4 - 像应用程序这样的插件中的命名空间
【发布时间】:2012-10-11 15:03:33
【问题描述】:

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

我将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-all-debug 没有捕获它),如果我指定stores:['B.store.Test'],它会加载它正确但现在我必须使用getBStoreTestStore() 来获取将导致大量代码更改的商店引用。

如何让控制器加载带有适当前缀的商店?

【问题讨论】:

    标签: extjs extjs4 extjs-mvc


    【解决方案1】:

    没有覆盖我认为这是不可能的。更重要的是我的观点它也不应该起作用!

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2022-12-24
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多