我正在尝试使用我的 init 数组并使用自定义函数(如 (http://knockoutjs.com/documentation/fn.html))对其进行过滤,而不是创建一个新数组,我只是覆盖旧数组。我正在点击 PO 。在内存中它正在工作,但一旦完成它就不会绑定到 DOM。这是因为我正在重写数组而不是从现有数组中删除项目吗?
问问题
478 次
2 回答
2
这不起作用,因为绑定将在这一行中断:
self.materialTrans = self.materialTrans.filterByProperty("PO", item.PO);
Knockout observables 不能被覆盖。如果要更新它们的值,则需要将新值作为参数传入。绑定到旧函数,您通过重新分配它来删除它。使这项工作的一种方法是这样做:
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;
};
这是更新的小提琴。如果我误解了你的目标,请告诉我。
于 2012-08-22T21:30:24.127 回答
0
我不知道这是否是唯一的问题,但是要设置 observableArray 的值,请执行以下操作:
self.materialTrans(x);
而不是这个:
self.materialTrans = x;
其中 x 是新的过滤数组,当然。
于 2012-08-22T21:34:48.477 回答