gpt4 book ai didi

javascript - 选择显示/隐藏时的 Knockout 计算重置

转载 作者:行者123 更新时间:2023-11-30 17:56:32 25 4
gpt4 key购买 nike

我最近在 knockout 中遇到了一个奇怪的行为。为了说明这一点,请看一下这个 fiddle :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)中的值时, View 模型中的相应变量会发生变化。第二个选择改变是否显示第一个。

尝试在第一次选择中选择 Steve 或 Jim,然后将其隐藏(在第二次选择中选择 false)。当您再次显示它时,myVar 的值会自动更改为 Dave(默认值),而不是切换到您选择的值。如果您不使用 ko.computed 而是使用纯 observable,则不会发生这种情况。

这是应该发生的吗?我的猜测是,knockout 在显示选择时会重新评估计算变量,因为它通常在程序执行开始时会这样做。

最佳答案

你有这种“奇怪”的行为是因为你的 read 方法中有一个“错误”。也就是说,您返回的是 myVar 可观察函数本身,而不是它的值。因此,您的选择将重置为“Dave”,因为 self.myVar 函数在 vars 数组中不存在。

因此,如果您将 myVarChangerread 方法更改为 return self.myVar();,它将产生预期的行为:

this.myVarChanger = ko.computed({
read: function () {
return self.myVar();
},
write: function (value) {
self.myVar(value);
}
});

演示 JSFiddle .

关于javascript - 选择显示/隐藏时的 Knockout 计算重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com