Computed Observable设置为null不会更新GUI

时间:2014-07-23 01:01:58

标签: knockout.js

我发现如果计算的observable设置为某个值,然后重新计算并返回null,则先前计算的值将用于绑定/ GUI不会更新。这看起来很奇怪,我想问一下我做错了什么,或者这是否是预期的行为?

示例(http://jsfiddle.net/LkqTU/18081/):

我使用计算的observable来返回css绑定中使用的类名。绑定可以是类名,也可以不是类。模板:

<p data-bind="css: textColour">Coloured text</p>

计算出的observable首先评估为&#39; green&#39;并且彩色文本变为绿色(我已经为类定义了css&#39; green&#39;)。当计算的observable重新计算并返回null时,文本颜色仍为绿色。

that.success = ko.observable(true);
that.textColour = ko.computed(function() {
    if (that.success()) {
        return 'green';
    } else {
        return null;
    }
});

我返回null以从绑定中删除该类。为什么这不起作用?我发现,如果我返回undefined,或者根本没有(undefined),则绑定会按预期更新,并且绿色会被删除。

这个问题并没有妨碍我前进,但是质疑我对KO的理解。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

这可能被视为绑定中的错误。我建议你在Github中提出一个问题:https://github.com/knockout/knockout

另一种解决方法是返回一个空字符串。

that.textColour = ko.computed(function() {
    if (that.success()) {
        return 'green';
    } else {
        return '';
    }
});