6

Ext JS MVC をプラグイン/ホスト アーキテクチャのフロントエンド テクノロジとして使用しています。1 つのホストが存在し、多くのプラグインを xcopy 経由で簡単にインストールできます。各プラグインには Ext JS アプリケーションがあり、各プラグインはページのロード時に自身を登録します。全体的なアプリケーションはシングル ページ アプリケーション (SPA)です。

現在直面している主な問題は、10 個を超えるプラグインがインストールされており、各プラグインには少なくとも 10 個のコントローラーと、50 個を超えるビュー、ストア、およびモデルがあることです。したがって、ページを更新すると (F5)、200 近くの HTTP 要求がサーバーに到達し、3 メガバイト近くの応答が返されるまで、約 30 秒間待機する必要があります。

キャッシュが適用されていますが、これはまったく望ましくありません。初めてでもありません。素人でさえ、牛乳を得るために、農場、牛、納屋、家、道路、電気、川などが建設されるまで待つべきではないというこの議論を受け入れると思います.

この問題に対する明確な答えは、コントローラー、ビュー、ストア、およびモデルの遅延読み込みでなければなりません。しかし、それを実現するために何をしなければならないかについての明確なイメージがなく、適切で適切な答えを Web 上で見つけることができません。ほとんどの議論は遅延読み込みの要件についてのみであり、その方法については言及されていません。たとえば、このリンクを見てください。

http://www.sencha.com/forum/showthread.php?130449-Large-Single-Page-Architecture-in-ExtJS-4.0

またはこれ:

http://www.sencha.com/forum/archive/index.php/t-156694.html?s=aaeec1ce30acbc9cbd2615afadec982f

メソッドを使用する場合Ext.require、コントローラーを単純な JavaScript ファイルとしてロードするだけで、ストア、ビュー、およびモデルをロードするためにコントローラーが階層に入ることはありません。私たちはそれをテストしました。

一方、Ext JS ではgetController()andが見つかりません。ControllerManagerExt JS 4.1.3 ではなくなったようです。

URL パラメーターに基づいてコントローラーを動的にロードする方法についてのアイデア (URL を解析してコントローラーを動的にロードするには、ルート エンジンが必要になる場合があります)。十分に文書化された記事やコード サンプルを含むフォーラム ディスカッションでさえ、私たちを助けることができます。

4

3 に答える 3

3

あなたの問題については、 Ext.requireを使用して、メニュークリックなどのイベントでコントローラーファイルをロードする必要があります。この後、コントローラーを初期化する必要があります。

ExtJs ソースを読み、以下にカスタム遅延ロード コントローラーを実装します。

// this should run first time your application start
Ext.application({
    name: 'AppName',
    appProperty: 'appProp'
});

// below lines should run when you want to load controllers
// (for ex on menuitemclick)
var controllers = ['yourController', 'anotherController'];

Ext.require(controllers, function () {
    for (i = 0; i < controllers.length; i++) {
        var controllerName = controllers[i].substr(controllers[i].lastIndexOf(".") + 1);
        if (!AppName.appProp.controllers.get(controllerName)) {
            var controller = Ext.create(controllers[i], {
                application: AppName.appProp,
                id: controllerName
            });
            controller.init(AppName.appProp);
        }
    }
});
于 2013-02-25T13:32:01.907 に答える
1

Ext.create() を試しましたか?

http://docs.sencha.com/extjs/4.2.0/#!/api/Ext-method-create

このメソッドは .js ファイルを動的にロードし、うまく機能しているようです。ただし、これを行うためのよりクリーンな方法があるはずです。

于 2013-05-24T19:13:29.617 に答える
0

少なくとも 4.2.0 では、これが利用可能です。アプリの設計チュートリアルから...

大規模なアプリケーションでは、実行時に追加のコントローラーをロードしたい場合があります。これは、getController メソッドを使用して行うことができます。実行時に追加のコントローラーをロードするときは、ロードしたコントローラーで init メソッドを手動で呼び出すことを忘れないでください。

someAction: function() {
  var controller = this.getController('AnotherController');

  // Remember to call the init method manually
  controller.init();
}

のこの機能に関するドキュメントへのリンクはExt.app.Application次のとおりです。

于 2014-03-09T02:56:38.053 に答える