Knockout js比较值

时间:2016-03-09 11:27:19

标签: javascript jquery knockout.js

我需要将变量9的值与name进行比较。但我不知道这样做。

必须是这样的:

id



if (this.name == self.copy().indexOf(this.id).name) {
    alert('equals');
} else {
    alert('not equals');
}

    function MyViewModel() {
        var self = this;
        self.items = ko.observableArray();
        self.copy = self.items;
        self.items.push({ id: 1, name: 'Jhon' });
        self.items.push({ id: 2, name: 'Smith' });
        self.alarm = function () {
            alert(this.name);
        }
    }
    
    ko.applyBindings(new MyViewModel());




1 个答案:

答案 0 :(得分:1)

您正在寻找更新的Array功能,例如filter。像这样使用它:

self.alarm = function(data) {
  var itemsWithSameName = self.copy().filter(function(item) {
    return item.name() === data.name();
  });

  if (itemsWithSameName.length > 0) {
    alert('At least one item with same name exists.');
  } else {
    alert('New name is unique, for now.');
  }
}

但是,为了实现这一点,您需要更改项目name上的observable(无论如何value绑定都需要工作)。

另请注意,我已将this替换为data传递给您在视图中绑定的自定义事件处理程序("当前"项目在{{} 1}}作为第一个arg传递给foreach)。

作为最后一点,请注意alarm 实际上是副本,而是引用到原始数组。

PS。如果您希望copy filter,则可以执行此操作:

id

正如我已经发表评论一样,这没有多大意义,因为self.alarm = function(data) { var itemsWithSameId = self.copy().filter(function(item) { return item.id === data.id; }); // If `id` is guaranteed to be unique, you can probably get away // with just assuming/grabbing the only item found: var theItem = itemsWithSameId[0]; // Note that you've just essentially retrieved `data`. That is: // data === theItem if (!!theItem) { alert('At least one item with same id exists.'); } else { alert('Id of edited item cuold not be found.'); } } 传递给事件处理程序已经data项目的引用