[英]Knockout computed reset on select show/hide
我最近在淘汰赛中遇到了奇怪的行为。 为了说明,请看一下这个小提琴: http : //jsfiddle.net/77aP3/ 。
this.myVar = ko.observable();
this.vars = ko.observableArray(["Dave", "Steve", "Jim"]);
this.tf = ko.observableArray([true, false]);
this.show = ko.observable();
var self = this;
this.myVarChanger = ko.computed({
read: function () {
return self.myVar;
},
write: function (value) {
self.myVar(value);
}
});
当您在第一个选择(Dave,Steve,Jim)中更改值时,相应的变量将在视图模型中更改。 第二个选择更改是否显示第一个。
尝试在第一个选择中选择Steve或Jim,然后将其隐藏(在第二个选择中选择false)。 再次显示时,myVar的值将自动更改为Dave(默认值),而不是切换到所选的那个。 如果您不使用ko.computed而是使用纯可观察的对象,则不会发生这种情况。
这应该发生吗? 我的猜测是,剔除会在程序执行开始时像通常那样显示选择内容时,重新评估计算出的变量。
您有这种“奇怪”的行为,因为您的读取方法中有一个“错误”。 即,您将返回myVar
可观察函数本身,而不是其值。 因此您的选择将被重置为“ Dave”,因为self.myVar
函数在vars
数组中不存在。
因此,如果更改myVarChanger
的read
方法以return self.myVar();
它将产生预期的行为:
this.myVarChanger = ko.computed({
read: function () {
return self.myVar();
},
write: function (value) {
self.myVar(value);
}
});
演示JSFiddle 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.