1

在我使用 Knockout.js 订阅面临循环依赖的情况下,以下代码是否有任何可能的修复方法。

this.observable1.subscribe(function(value){
self.observable2("someValue");
});

this.observable2.subscribe(function(value){
self.observable1("someValue");
});

其中“self”是“this”的别名,observable1 链接到组合框,observable2 链接到日期选择器。

请建议

4

2 回答 2

1

正如@Origineil 所说,您可能需要重新考虑您的解决方案。

但是如果你真的想保留当前的解决方案,你可以使用一个标志来打破循环。

var isInnerUpdate = false;

this.observable1.subscribe(function(value){
  if (isInnerUpdate) {
    isInnerUpdate = false;
  } else {
    isInnerUpdate = true;
    self.observable2("someValue");
  }
});

this.observable2.subscribe(function(value){
    if (isInnerUpdate) {
    isInnerUpdate = false;
  } else {
    isInnerUpdate = true;
    self.observable1("someValue");
  }
});
于 2014-06-28T08:51:46.183 回答
0

我使用了如下的全局变量和逻辑,对我来说效果很好,

var enableSubcribe = false; //global variable 
this.observable1.subscribe(function(value){ 
enableSubcribe = true; 
self.observable2("someValue");
enableSubcribe = false; 
}); 

this.observable2.subscribe(function(value){
 if(!enableSubcribe ){
self.observable1("someValue");
}
 });

感谢 Huocp,您的逻辑看起来也很有效。感谢大家的评论和回答。

于 2014-06-30T12:40:13.637 回答