knockoutjs - 检查数组中是否存在项目总是返回true

时间:2017-01-12 15:06:32

标签: knockout.js

我有一张表是可观察物品的可观察物。每行中的第一项是项目编号。我加载了可能有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" />

1 个答案:

答案 0 :(得分:1)

检查您是否未将项目与自身进行比较。目前尚不清楚itemNo来自哪里;它应该是self.items之一的成员。此外,您的名字有点落后:newItem实际上是要比较的现有项目。

因此,如果新项目为newItem,您的比较可能如下所示:

var match = ko.utils.arrayFirst(self.items(), function(oldItem) {
  return newItem !== oldItem && newItem.itemNo() === oldItem.itemNo();
});