2012-08-22 92 views

回答

2

因爲綁定是要在這一行打破這將不起作用:

self.materialTrans = self.materialTrans.filterByProperty("PO", item.PO); 

淘汰賽觀測不能被覆蓋。如果您想更新它們的值,則需要將新值作爲參數傳遞。綁定是通過重新分配它而去除的舊函數。一種方法,使這項工作是這樣做的:

self.materialTrans(self.materialTrans.filterByProperty("PO", item.PO)); 

,改變你的函數,只是返回一個數組:

ko.observableArray.fn.filterByProperty = function(propName, matchValue) { 

     var allItems = this(), 
      matchingItems = []; 
     for (var i = 0; i < allItems.length; i++) { 
      var current = allItems[i]; 
      if (ko.utils.unwrapObservable(current[propName]) === matchValue) matchingItems.push(current); 
     } 
     return matchingItems; 
}; 

這裏是更新fiddle。如果我誤解了你的目標,請告訴我。

+0

非常感謝Tyrsius的快速反應。 – MadDogMcFie

0

我不知道它是否是唯一的問題,而是設置一個observableArray的值,這樣做:

self.materialTrans(x); 

取而代之的是:

self.materialTrans = x; 

其中x是新過濾陣列,當然。