Knockout computed不会重新评估,即使计算中的可观察值正在改变

时间:2014-05-07 08:00:39

标签: knockout.js

我注意到一些在我的应用程序中工作正常的东西最近似乎不太好,它恰好在视觉工作室中将nuout更新为2.3.0 - 当然,这可能是巧合! / p>

我订阅了一个简单的限制观察点:

    this.throttledValue.subscribe(function (newValue) {
        return datacontext.checkComparisonExists(comparisonCode()).then(function (res) {
            isDuplicateComparisonCode(res);
        });
    });

我将ajax查找的结果(true / false)推送到我的isDuplicateComparisonCode observable中。

我还有以下var函数:

var canSave = ko.computed(function () {
    return hasChanges() && !isSaving() && !isDuplicateComparisonCode();
});

绑定到我的保存按钮:

<button class="btn btn-warning" data-bind="click: $parent.save, enable: $parent.canSave()"><i class = icon-save></i> Save</button>

并且想法是在没有更改(hasChanges)的情况下禁用了保存按钮,还没有进行保存(!isSaving)并且输入的代码不重复(!iDuplicateComparisonCode)。

这里的关键点......这个WAS工作一周/两周前因为我已经保存了几个测试项目而且我只能在启用保存按钮时保存!我在一个多月内没有在应用程序的这一部分编辑任何代码,所有发生的事情都是已经更新了淘汰赛。

在chrome中调试时,throttledValue.subscribe函数每次都被正确命中,我可以看到isDuplicateComparisonCode observable被成功更新为true或false值。

canSave var函数只被命中一次,但是,在页面加载时它似乎只是将值缓存为'false'因此禁用我的保存按钮,而不管其中包含的其中一个observable是什么(isDuplicateComparisonCode)正在改变。我希望每当一个成分可观测量被更新时,canSave函数就被命中了吗?

编辑添加:有点奇怪,相同的代码在我的开发机器上完美运行,只是没有实时。这有点令人担忧,因为它最近已被重新发布,而且它看起来都是相同的,所以我现在完全感到困惑。

0 个答案:

没有答案