使用Knockout订阅的循环依赖

时间:2014-06-27 09:53:04

标签: knockout.js knockout-subscribe

对于使用Knockout.js订阅我面临循环依赖的下面代码是否有任何可能的修复。

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

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

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

请建议

2 个答案:

答案 0 :(得分: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");
  }
});

答案 1 :(得分: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,你的逻辑看起来也很有用。谢谢大家的意见和回答。

相关问题