2012-08-22 61 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是新过滤阵列,当然。