我需要将变量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());

答案 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
项目的引用