我有两个简单的可观察对象,例如,
val1 = ko.observable("input1");
val2 = ko.observable("input2");
我想让它们像一个人一样行动,所以当其中一个改变时,另一个也会改变。
我知道在一般情况下,最好只使用一个observable并将其绑定到多个dom元素。但在我的情况下,theese observables生活在不同的模板和对象中,因此它们不能是一个变量。
目前我订阅了一个observable到另一个,反之亦然:
val1.subscribe(function(v) {
val2(v);
});
val2.subscribe(function(v) {
val1(v);
});
然而,当您更改一个observable的值时,它会更新第二个,但这会导致连锁反应并再次更新第一个,无限期。
如何在两个单独的observable之间设置一个双向绑定,当你修改另一个而不会导致无限循环时,它会设置一个值?
答案 0 :(得分:0)
您可以这样做:
vm1 = {
val1: ko.observable('input1'),
otherProperty: ko.observable('more')
}
vm2 = {
val2: vm.val1,
otherProperty: ko.observable('data')
}
vm1.val1
和vm2.val2
都解析为相同的可观察值,因此值相同。
答案 1 :(得分:0)
Sethi的答案可行,但computed 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);