5

我有两个简单的可观察对象,例如,

val1 = ko.observable("input1");
val2 = ko.observable("input2");

我希望他们表现得像一个人,所以当其中一个发生变化时,另一个也会发生变化。

我知道在一般情况下最好只使用一个 observable 并将其绑定到几个 dom 元素。但就我而言,这些可观察对象存在于不同的模板和对象中,因此它们不能是一个变量。

目前我订阅一个可观察到另一个,反之亦然:

val1.subscribe(function(v) {
    val2(v);
});
val2.subscribe(function(v) {
    val1(v);
});

但是,当您更改一个 observable 的值时,它会更新第二个,但这会导致连锁反应并再次无限更新第一个。

如何在两个单独的 observable 之间设置双向绑定,当您修改另一个时设置一个的值而不导致无限循环?

4

2 回答 2

0

你可以这样做:

vm1 = {
    val1: ko.observable('input1'),
    otherProperty: ko.observable('more')
}

vm2 = {
    val2: vm.val1,
    otherProperty: ko.observable('data')
}

两者都vm1.val1解析vm2.val2为相同的可观察对象,因此具有相同的值。

于 2012-10-07T10:50:47.410 回答
0

Sethi 的答案会起作用,但这可能会更好地与计算的 observables一起使用

示例:http: //jsbin.com/exipuq/1/edit

var viewModelA = function(){
  this.myVal = ko.observable();
};

var viewModelB = function(otherViewModel){
  this.compVal = ko.computed(function(){
    return otherViewModel.myVal(); 
  });
};

// create a new viewmodel like normal
var vma = new viewModelA();

// pass the instantiated view model 
// into the new one you're creating    
var vmb = new viewModelB(vma);
于 2012-10-08T19:57:49.497 回答