我有一张表是可观察物品的可观察物。每行中的第一项是项目编号。我加载了可能有10行现有数据的页面。我尝试添加一行新数据。我输入项目编号和标签。当发生这种情况时,它会检查它是否已经在数组中,因此它不会让用户添加多个相同的项目编号。好吧,因为它是可观察的,我假设它立即被添加到数组中,因为我输入它或者当我标签出来时。因此,检查 总是 返回true。
这是我执行检查的功能:
self.checkItemNo = function(data) {
//console.log("lost focus - " + self.invalidItem());
var itemNo = $.trim(data.itemNo());
console.log(itemNo);
if (itemNo != "") {
var item = "";
$.each(window.listOfItems, function(i, v) {
if (v.No.search(itemNo) != -1) {
item = v.Description;
return;
}
});
console.log(item);
if(item != "") {
console.log(self.items()[0].itemNo());
var match = ko.utils.arrayFirst(self.items(), function(oldItem) {
console.log("checking " + newItem.itemNo());
//return itemNo === newItem.itemNo();
return newItem !== oldItem && newItem.itemNo() === oldItem.itemNo();
});
这里是checkItemNo被调用的地方:
<input data-bind="value: itemNo, hasFocus: invalidItem, selected: invalidItem, event: { blur: $parent.checkItemNo }, attr: { name: 'brochureitems[' + $index() + '].itemNo', id: 'brochureItems_' + $index() + '__itemNo' }, validationOptions: { errorElementClass: 'input-validation-error' }" class="form-control item-id" />
答案 0 :(得分:1)
检查您是否未将项目与自身进行比较。目前尚不清楚itemNo
来自哪里;它应该是self.items
之一的成员。此外,您的名字有点落后:newItem
实际上是要比较的现有项目。
因此,如果新项目为newItem
,您的比较可能如下所示:
var match = ko.utils.arrayFirst(self.items(), function(oldItem) {
return newItem !== oldItem && newItem.itemNo() === oldItem.itemNo();
});