【发布时间】:2013-12-07 00:36:44
【问题描述】:
在为名为@987654321@ 的在线计算器框架开发代码时,我有两个ko.observables,名为calcVar1.selUnit 和calcVar2.selUnit,我想将它们连接在一起。我的意思是,如果一个改变,另一个改变,反之亦然。我试图解决这个问题的方法是创建两个显示变量 calcVar1.dispSelUnit 和 calcVar2.dispSelUnit,它们是 ko.computed()。这些是在视图中绑定的,它们有如下不同的读/写功能。
// Modified write function
calcVar1.dispSelUnit = ko.computed({
read : function(){
console.log('Reading source var sel unit.');
// Return as usual
return calcVar1.selUnit();
},
write : function(value){
// Write to both of them
console.log('Writing ' + value + 'to both sel unit.');
calcVar1.selUnit(value);
calcVar2.selUnit(value);
},
owner : this
});
// Modified write function
calcVar2.dispSelUnit = ko.computed({
read : function(){
console.log('Reading destination var sel unit.');
// Make it equal to the source variables selected unit
return calcVar2.selUnit();
},
write : function(value){
// Write to both of them
console.log('Writing ' + value + 'to both sel unit.');
calcVar1.selUnit(value);
calcVar2.selUnit(value);
},
owner : this
});
}
所以基本上,dispSelUnits 充当下面真实selUnit 值的中介,在写入时更新selUnit (ko.observables),而在读取时表现正常。
我看不出这个逻辑有什么问题。但是,在运行此程序时,如果我尝试更新 compVar1.dispSelUnit,它将进入一个无限循环,其中 compVar1.dispSelUnit 被写入然后读取,然后 compVar2.dispSelUnit 被写入和读取,然后再次返回。
【问题讨论】:
-
您在那些读/写函数中还做其他事情吗?如果没有,为什么不立即绑定到原始变量?
-
写入函数被修改,它更新了两个变量而不是一个变量(见上文)。
-
但是如果两个变量总是同步的,为什么不绑定到其中一个变量呢?为什么你首先有两个变量?他们是否有其他地方更新(单独?
-
这个“写给
selUnitdispSelUnit”是我试图让它们同步的方式。 -
但是它们是在其他地方单独更新的吗?
标签: javascript recursion binding knockout.js freeze