我有一個函數在我的viewmodel中循環遍歷一個數組,並看看 有相似ID的項目(我知道這是錯誤的,因爲ID是唯一的,將改變它一些自定義數據屬性,當我解決這個問題),並檢查他們,如果找到。下面是函數:Knockout - ko.computed和ko.observable.subscribe之間的差異
/*
Search for similar terms in taxonomy,
if found check/uncheck them
*/
self.srcSimilar = function(tid,val){
_.filter(self.topics(), function(topic) {
return _.any(topic.children, function(member) {
tid === member.tid ? member.isSelected(val) : '';
return _.any(member.children, function(child) {
tid === child.tid ? child.isSelected(val) : '';
});
});
});
}
因爲現在,該功能被稱爲child.is選擇觀察到,像這樣的.subscribe方法中:
child.isSelected.subscribe(function(val){
self.srcSimilar(child.tid,val);
});
現在我需要改變孩子。 isSelected可觀察到的可觀察值,因爲checked/unchecked狀態取決於插入到selectedItems可觀察數組中的子項。所以我改變了child.isSelected觀察到:
child.isSelected = ko.computed({
read: function(){
},
write: function(val){
self.srcSimilar(child.tid,val);
}
});
......但這最終在控制檯中的「太多遞歸」錯誤。 我在這裏錯過了一些東西,不明白爲什麼.subscribe有效並且ko.computed寫入方法在遞歸中被佔用。 感謝您的幫助。
謝謝@Timo,真的很清楚,很有幫助。 –