1

次のビュー モデルを含む製品概要ページがあるとします。

  • ProductIndexViewModel ; ページ全体にバインドされたルート ビュー モデル
    • ProductListViewModel ; すべての製品を表示するためのウィジェット
    • ProductRegistrationViewModel ; 新商品登録用ウィジェット

ウィジェットは、カスタム HTML 要素 (<product-list></product-list>および など<product-registration></product-registration>) を使用してロードされます。これらのウィジェットの知識をルートモデルに入れる必要がないので、これは素晴らしいことです。ただし、ユーザーが新しい製品を登録した後、製品リストも更新したいと思います。要するに:

ProductRegistrationViewModel から ProductListViewModel にシグナルを送信するにはどうすればよいですか?

私はすでにKnockout Postboxを調べましたが、これで問題が解決するようには見えません。複数の製品リストがあり、そのうちの 1 つだけを更新したい場合はどうすればよいですか? 理想的には、コンポーネントのビュー モデルに一連のパブリック メソッドを実装したいと考えています。次に、次のように、ページのルート ビュー モデルから 2 つを結び付けます。

var ProductIndexViewModel = function() 
{
    var productRegistrationComponent = ??;
    var productListComponent = ??;

    productRegistrationComponent.onRegistrationComplete(function() {
      productListComponent.refresh();
    };
}

ただし、ここからこれらのビュー モデルにアクセスすることはできません。それとも私ですか?

ルート ビュー モデルから子ビュー モデルにアクセスするにはどうすればよいですか?

最後に、誰かが私の問題に対するより良い解決策を見つけたら、私はすべて耳にします!

4

2 に答える 2

3

監視可能な配列 (製品リスト) を共有する必要があるようです。このリストをルートモデルで定義し、それに依存するウィジェットに渡すのが最善だと思います。両方のコンポーネントが同じオブザーバブルを共有している場合、2 つのコンポーネント間の通信について心配する必要はありません。HTML は次のようになります<product-list data-bind="list: $root.allProducts"></product-list>

ルート ビュー モデルから子ビュー モデルにアクセスするにはどうすればよいですか?

ko.contextFor必要に応じて、HTML 要素のコンテキストを取得するために使用できます。

于 2014-09-10T14:51:00.587 に答える