我最近在淘汰赛中遇到了一个奇怪的行为。为了说明,看看这个小提琴: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 而是使用纯可观察对象,则不会发生这种情况。
这应该发生吗?我的猜测是,当它显示选择时,knout 会重新评估计算变量,就像它通常在程序执行开始时所做的那样。