簡體   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