繁体   English   中英

选择显示/隐藏时的淘汰赛重置

[英]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数组中不存在。

因此,如果更改myVarChangerread方法以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM