0

ビューとストアをコントローラーに動的に追加したい。だから、私はこれを持っていました:

Ext.define('App.controller.MyController', {
    extend: 'Ext.app.Controller',
    stores: ['App.store.Users'],
    views: ['App.view.Users.Index'],

私はこのコントローラを動的に作成しています:

var controller = this.getController("Users");

次のように、ストアとビューを動的に追加するにはどうすればよいですか。

var controller = this.getController(moduleID);

controller.stores = [];
controller.views = [];

controller.stores.push('App.store.Users');
controller.views.push('App.view.Users.Index');

しかし、私がそれをすると、うまくいきません。Ext.apply()コンソールは、Ext は「未定義からバッファリング」できないと言ってExt.merge()います。getterssettersstores

どう思いますか?

@asgothの編集:

使用時this.getController("nameOfController");にコントローラーが存在しない場合は、Ext-JS がコントローラーを作成します。console.log(controller);私がデータを取得しているとき(そしてドキュメントもそれを言っているので)、それは100%機能しています。:)

4

1 に答える 1

1

コントローラをインスタンス化するときにアレイを準備する必要があるため、それほど多くの選択肢はありません。デフォルトでは、これは1回だけ発生します。これは、Ext.app.Applicationコントローラー(インスタンス)によって管理される必要があるためです。

getController最初のポイントは、追加の構成を受け入れないため、ここではこのメソッドを使用できないことです。したがって、最も簡単な解決策は、getControllerオーバーライドを避けるために少し名前を変更した、独自のメソッドの実装です。

ここに例があります:

getControllerInstance: function(name, cfg) {
    var me = this.application,
        controllers = me.controllers,
        controller = controllers.get(name);

    if (!controller) {
        controller = Ext.create(me.getModuleClassName(name, 'controller'), Ext.ApplyIf({
            application: me,
            id: name
        },cfg);

        controllers.add(controller);
        if (me._initialized) {
            controller.doInit(me);
        }
    }

    return controller;
}

このバリアントは配列パラメータに値を追加せず、代わりに既存のパラメータを上書きすることに注意してください。

また、すべてのコントローラーは、このメソッドを持つコントローラーから継承する必要があることに注意してください。

于 2012-12-30T12:00:45.157 に答える