1

現在、次のような計算されたオブザーバブルがあります。

// Backed with either an observable array or an observable of an array
var underlying = ko.observable([..]);

var obs = ko.computed({
   read: function () { return underlying(); },
   write: function (items) {
      // Process items - basically, I have the parent collection quickly
      // subscribe to an observable on each item. This in and of itself
      // should likely be cleaned up, but is not the focus of this question.
      // For instance:
      items.forEach(function (i) {
         if (!subscribed(i.title)) {
           i.title.subscribe(removeItemWhenEmptyTitle);
         }
      });

      underlying(items);
   }
});

ただし、この計算されたオブザーバブルを、呼び出し可能なオブザーバブル配列のように処理できるようにしたいと考えています。obs.push(..)

これをハックするのはいくらか簡単ですが、それは正しくないと感じており、既存の監視可能な配列メソッドのすべてを複製したくありません。

obs.push = function (item) {
  var arr = obs();
  arr.push(item);
  obs(arr);
});

また、オブザーバブル配列と配列のオブザーバブルの決定的な違いを見落としている可能性あります。

4

1 に答える 1

1

コメントから移動:

最も簡単な方法は、observableArray を使用し、それをサブスクライブして処理を行うように見えます。これは、値が書き込まれる前にボットが値を操作しているためです。

于 2013-10-29T13:01:31.463 に答える