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