[英]Updating observable array in knockout
我有一个名为Administrators的可观察数组。 我还有一个名为adminToAdd的对象。 AdminToAdd包含具有与管理员完全相同的属性的单个项目。 我可以毫无问题地将adminToAdd推入管理员。
不幸的是,我无法更新管理员中的现有项目。 我正在adminToAdd中收到要更新的项目。 我试过了
vm.administrators.replace(vm.administrators.indexOf(vm.adminToAdd), vm.adminToAdd);
但尽管它们之间的结构相同,但索引不匹配。 我看了几个例子,但似乎没有一个适合我的情况。 有任何想法吗?
您的方法不起作用的原因是,当您使用indexOf
尝试查找对象而不是值时。 找到对象时,它使用内存地址来确定相等性,而不是对象的值。
对于这种情况ko.utils.arrayFirst(array, predicate)
我喜欢ko的实用程序函数ko.utils.arrayFirst(array, predicate)
。 这使您可以搜索数组中的特定项目,如果找到,则将其返回。 您提供了一个谓词函数,如果对象与其他任何对象相等或为假,则该函数将返回true。
var existingItem = ko.utils.arrayFirst(vm.administrators(), function (item) {
return <true or false statement> //define what constitutes equal here;
});
if (existingItem) {
vm.administrators.remove(existingItem);
vm.administrators.push(vm.adminToAdd());
}
else {
//case where it wasn't in the array
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.