繁体   English   中英

在淘汰赛中更新可观察阵列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM