1

スタンドアロン アプリケーションとしても実行できる複数のモジュール/プラグインを含むモジュラー アプリケーションがあります。

module/pluginコントローラーをメインアプリケーションに動的に登録しますが、ここに問題があります。

  • 私のメインアプリには A プレフィックスがあります-そのコントローラー」 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()、ストア参照を取得するために使用する必要があります。多くのコードの変更。

適切なプレフィックスでストアをロードするようにコントローラーを作成する方法は?

4

1 に答える 1

1

オーバーライドなしでは不可能だと思います。私の見解では、それもうまくいかないはずです!

からのすべてのコードext-all-debug.js

コントローラーは、独自のクラス名を使用して適切なプレフィックスを使用してクラスを適切にロードします。

namespace = Ext.Loader.getPrefix(className) || match[1];
namespaceAndModule = namespace + '.' + module + '.'

ただし、ビュー、ストア、モデルごとに、そのコントローラーが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はアプリケーション名を使用して構築されるため、 usingstores:['Test']は を指しA.store.Testます。

オーバーライドを書くことを考えていますが、他のものを壊してしまうのではないかと心配しています。

于 2012-10-15T11:40:07.800 に答える