3

1 つの HTML ページ (レガシー アプリ) で 2 つ以上の単一ページ アプリケーションをホストしたいと考えています。これらのアプリは、ページの完全に異なる場所に配置する必要があります。したがって、トップ ルートの「シェル」に durandal コンポジションを使用して、ko compose バインディングを使用して合成を行うことはできません。これらのアプリは、それらの間 (ルーター/イベント アグリゲーター) で通信できる必要があります。

Durandal とその Router プラグインをそのようなものに使用することは可能ですか? ベストアプローチとは?

複数の要素を使用して、vm/要素のさまざまな組み合わせapplicationHostで呼び出しようとしましたが、うまくいきませんでした。app.setRoot(vm, transition, element)最後の電話が勝つようです...

また、Durandal の Google グループに関するディスカッションを作成しました: https://groups.google.com/forum/?fromgroups=#!topic/durandaljs/e6GclW0bEo0

4

3 に答える 3

2

残念ながら、アプリを完全に分離する唯一の方法は、異なるドキュメント (iframe または通常のフレーム、さらには異なるウィンドウ) を使用することです。これは、多くの共有状態があり、Durandal は高度に構成可能である一方で、多くのシングルトン ポイントがあるためです。

  • ほとんどの durandal/* コンポーネントは、シングルトンとして機能することを期待しています。アプリの構成は共有されます。アプリのサブスクリプション/イベントは共有されます。同様に、デフォルトのモジュール ルックアップ ルールも共有されるため、特別な「セレクター」(つまり、モジュール ID のアプリ プレフィックス) を使用する必要があります。
  • RequireJS はシングルトンです。require ルックアップ ルールが共有されます。
  • ノックアウトはシングルトンです。bindingHandler を追加すると、すべてのアプリケーションで共有されます。

したがって、多数の「協調」アプリケーション (「プラグイン」と考えてください) を作成することは可能ですが、それぞれがホストを認識し、衝突を慎重に回避する必要があります。また、関連するルックアップ解決を提供するために、モジュール パス (つまり、各アプリの名前のプレフィックス) と連携する必要があります。

于 2013-05-02T05:10:06.363 に答える
1

おそらく、デュランダルの各インスタンスを iframe でホストできます。

于 2013-04-01T19:42:49.253 に答える