【发布时间】:2016-12-31 05:05:15
【问题描述】:
我的视图模型中有一个函数,它遍历一个数组并查看 对于具有相似 id 的项目(我知道这是错误的,因为 id 是唯一的,当我解决此问题时会将其更改为一些自定义数据属性)并检查它们是否找到。这是函数:
/*
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 的 Selected observable 的 .subscribe 方法内部调用,如下所示:
child.isSelected.subscribe(function(val){
self.srcSimilar(child.tid,val);
});
现在我需要将 child.isSelected observable 转换为计算的 observable,因为选中/未选中状态取决于插入 selectedItems 可观察数组中的子项。所以我将 child.isSelected observable 更改为:
child.isSelected = ko.computed({
read: function(){
},
write: function(val){
self.srcSimilar(child.tid,val);
}
});
...但这最终导致控制台中出现“递归过多”错误。 我在这里遗漏了一些东西,不明白为什么 .subscribe 有效并且 ko.computed write 方法陷入了递归。 感谢您的帮助。
【问题讨论】:
标签: knockout.js