現在、次のような計算されたオブザーバブルがあります。
// 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);
});
また、オブザーバブル配列と配列のオブザーバブルの決定的な違いを見落としている可能性があります。