如何防止可观察的耦合?

时间:2014-08-12 10:08:33

标签: javascript jquery knockout.js observable

我有一个案例,两个可观察对象相互依赖,导致无限循环。

this.value = ko.observable();
this.selectedOptions = ko.observableArray();

this.value.subscribe(function(value){
    this.selectedOptions(value.split(', '));
});

this.selectedOptions.subscribe(function(options){
    this.value(options.join(', '));
});

如何防止无限循环并更新两个观察点?

1 个答案:

答案 0 :(得分:1)

打破循环。

this.value = ko.observable();
this.selectedOptions = ko.observableArray();

var isInnerUpdate = false;

this.value.subscribe(function(value){
  if (!isInnerUpdate) {
    isInnerUpdate = true;
    this.selectedOptions(value.split(', '));
    isInnerUpdate = false;
  }
}, this); // I think you missed 'this' ref binding

this.selectedOptions.subscribe(function(options){
  if (!isInnerUpdate) {
    isInnerUpdate = true;
    this.value(options.join(', '));
    isInnerUpdate = false;
  }
}, this);