我的视图模型的属性上有一个 observableArray:
self.rates = ko.observableArray([])
数组的内容显示在 HTML 表格中。有一个按钮可以将项目添加到数组中。这些是经过验证的 observables:
self.newRate = function () {
var rate = new Rate({id: self.id});
rate.isEditing(true);
rate.isNew = true;
rate = ko.validatedObservable(rate);
self.vendor().rates.push(rate);
};
这工作正常。该项目被添加到数组中并且视图更新。新添加的项目旁边有一个取消链接,可以让用户删除该行。
self.editRateCancel = function (item) {
if (item.isNew === true) {
self.vendor().rates.remove(item);
} else {
item.cancelEdit();
ko.utils.arrayForEach(self.unitsOfMeasure(), function (uom) {
if(item.cacheUnitOfMeasureID === uom.value) {
item.selectedUOM(uom);
}
});
}
};
对 的调用remove(item)
不会删除该项目。如果我没有将该项目设置为经过验证的 observable,则删除成功。查看remove
函数显示传入的项目 (valueOrPredicate) 是类型Object, (Rate)
,但从底层数组返回的值是 of,Object, (Function)
因此predicate(value)
返回 false,因此项目不会被删除。
KnockoutJS 删除功能:
ko.observableArray['fn'] = {
'remove': function (valueOrPredicate) {
var underlyingArray = this.peek();
var removedValues = [];
var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };
for (var i = 0; i < underlyingArray.length; i++) {
var value = underlyingArray[i];
if (predicate(value)) {
if (removedValues.length === 0) {
this.valueWillMutate();
}
removedValues.push(value);
underlyingArray.splice(i, 1);
i--;
}
}
if (removedValues.length) {
this.valueHasMutated();
}
return removedValues;
},
如何从可观察数组中删除特定的已验证可观察对象?是否有任何实用功能可用?