我想拿我的init数组并通过使用自定义函数(http://knockoutjs.com/documentation/fn.html)来过滤它,而不是创建一个新的数组,只是覆盖旧的。我点击采购订单。在内存中它正在工作,但一旦完成就不会绑定到DOM。这是因为我重写数组而不是从现有数组中删除项目?Knockoutjs observableArray没有约束
http://jsfiddle.net/chadrickm/39xsC/
我想拿我的init数组并通过使用自定义函数(http://knockoutjs.com/documentation/fn.html)来过滤它,而不是创建一个新的数组,只是覆盖旧的。我点击采购订单。在内存中它正在工作,但一旦完成就不会绑定到DOM。这是因为我重写数组而不是从现有数组中删除项目?Knockoutjs observableArray没有约束
http://jsfiddle.net/chadrickm/39xsC/
因为绑定是要在这一行打破这将不起作用:
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。如果我误解了你的目标,请告诉我。
我不知道它是否是唯一的问题,而是设置一个observableArray的值,这样做:
self.materialTrans(x);
取而代之的是:
self.materialTrans = x;
其中x是新过滤阵列,当然。
非常感谢Tyrsius的快速反应。 – MadDogMcFie