0

viewModel.data() の監視可能な要素が変更された場合に起動できる単一のエミッターはありますか?それとも、独立した監視可能な要素のそれぞれをループしてサブスクライブする必要がありますか?

data: ko.observable([
      {
        name: "Chart Position",
        fields: ko.observableArray([
          {name: "marginBottom", type: "percOrNumber", value: ko.observable(), valueType: ko.observable()},
          {name: "marginLeft", type: "percOrNumber", value: ko.observable(), valueType: ko.observable()},
          {name: "marginRight", type: "percOrNumber", value: ko.observable(), valueType: ko.observable()},
          {name: "marginTop", type: "percOrNumber", value: ko.observable(), valueType: ko.observable()}
        ])
      }
    ]),
4

1 に答える 1

2

計算されたオブザーバブルを使用して、複数のオブザーバブルを同時に「サブスクライブ」できます。計算されたオブザーバブルの評価でアクセスされる値を持つオブザーバブルは依存関係になります。

したがって、次のようなことができます。

ko.computed(function() {
    this.one();  //just accessing the value for a dependency
    this.two();  //doesn't matter if we actually use the value
    this.three();

    //run some code here or if you have a reference to this computed observable, then you can even do a manual subscription against it.
}, vm);

あるオブジェクト グラフのすべてのオブザーバブルをサブスクライブしたい場合、それを行う簡単な方法は を使用することko.toJSです。あなたの例では、次のことを行うことができます。

ko.computed(function() {
   ko.toJS(vm.data);  //will create dependencies on all observables inside "data"

   //run some code
}, vm.data);
于 2012-05-10T16:22:31.757 に答える