4

ノックアウトViewModelにAJAX呼び出しによって入力されたアイテムの配列があります。これは、Webページ上の各アイテムのデータのいくつかのフィールドを表示します。

次に、ユーザーが1つのアイテムをクリックして、前のAJAXリクエストから受信したデータ(いくつかのフィールドに加えてさらに多くのフィールド)をサイドバーに入力できるようにする必要があります。

通常、IDを取得してアイテム 固有のAJAXリクエストを実行し、Sammy.jsを介してルーティングすると思いますが、その必要はありません。

私はノックアウトに不慣れです。私が想像する最善のポリシーは、さまざまなdivにデータを表示するためのViewModelを用意することですが、ViewModelにデータを渡す方法はありますか?これはタブーですか?

  • ウィンドウオブジェクトを介して他のウィンドウを参照していますか?
  • with:キーワードを使用しますか?それは増え続けますが、このコンテキストでそれを適用する方法がわかりません。
  • おそらくSammy.jsを経由して、Amplifyにデータをキャッシュしますか?

これはドリルダウン機能の例であり、これに関するStackOverflow Q&Aをいくつか読みましたが、使用できるものが見つかりませんでした。John PapaのPluralSightチュートリアルに従って、この段階に到達しました。

4

4 に答える 4

6

Amplify のメッセージングまたは上記の @RPNiemeyer が言及したライブラリのいずれかを使用して、pub/sub モデルを使用することをお勧めします。どちらも優れています。

ただし、サーバーからデータを取得し、そのデータを複数のビュー モデルで使用したいだけのようです。おそらく、そのデータの一部を複数のビュー モデルで共有することさえあります。私の SPA チュートリアルのデータ コンテキストの概念により、データ コンテキストでデータをホストし、他のビュー モデルから参照することができます。

Breeze のようなライブラリを使用してこれを行うこともできます (Breeze は私の SPA の datacontext を置き換えます...そして、今後のコースで示すように、それが得意になります)。

これらはほんの一部のオプションです

于 2012-11-21T04:49:08.813 に答える
1

また、ブリーズのドキュメントの「Cool Breezes」の下にある「 Share an EntityManager 」の投稿をチェックアウトすることもできます。

おそらく、単一の EntityManager を共有するだけで十分です。ただし、複数のマネージャーが必要な場合は、「複数のマネージャー」をお読みください。

于 2012-11-27T20:21:03.913 に答える
0

コメントで述べたように、ノックアウトポストボックスを使用することをお勧めします

knockout-postbox は、Knockout の基本的な pub/sub 機能を使用して、個別のビュー モデル / コンポーネント間の分離された通信を促進するように設計された Knockout.js プラグインです。

これにより、次のような単純なトピックベースのコミュニケーションを設定できます。

var ViewModelOne = function() {
  this.isEditable = ko.observable();  
};

var ViewModelTwo = function() {
  this.editable = ko.observable(false);  
};

var one = new ViewModelOne();
var two = new ViewModelTwo();

var editableTopic = "myEditableTopic";
one.isEditable.subscribeTo(editableTopic);
two.editable.publishOn(editableTopic)
于 2014-08-13T11:44:37.213 に答える