2013-10-29 55 views
1

目前,我有一個計算觀察到的類似:創建一個類似於observableArray的計算可觀察性?

// 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); 
    } 
}); 

不過,我想能夠治療這個計算觀察到像observable array這樣,我可以打電話obs.push(..)和這樣。

破解這件事有點微不足道,但它感覺不對,我不想複製所有現有的可觀察數組方法。

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

而且,我可能會丟失可觀察到的陣列和陣列可觀察到的之間的關鍵區別。

+0

因爲,它看起來像你沒有操縱正在寫入的值,你可以只使用一個observableArray,然後訂閱它來做你的處理。 –

+0

@RPNiemeyer我已經更新了我的代碼,以顯示我正在嘗試寫入的要點。 「Y」問題圍繞讓*父母*認可/反應孩子中的觀察物而展開 - 例如,當小孩的標題observable設置爲「」時,從* parent *集合中刪除子項/項目。 – user2864740

+0

@RPNiemeyer哦,哦。對。是的,我*可以*做到這一點。 – user2864740

回答

1

從評論感動:

你看起來像只使用observableArray,然後訂閱它做你的處理,因爲你是機器人已被寫入前操縱值最簡單的路徑。