Knockout.js 即使计算出的敲除值中的可观察值正在更改,也不会重新评估

Knockout.js 即使计算出的敲除值中的可观察值正在更改,也不会重新评估,knockout.js,Knockout.js,我注意到,最近在我的应用程序中运行良好的一些东西似乎不太好,这与在visual studio中将nuget中的knockout更新为2.3.0不谋而合——当然,这可能是巧合 我有一个简单的节流观测,我同意: this.throttledValue.subscribe(function (newValue) { return datacontext.checkComparisonExists(comparisonCode()).then(function (res) {

我注意到,最近在我的应用程序中运行良好的一些东西似乎不太好,这与在visual studio中将nuget中的knockout更新为2.3.0不谋而合——当然,这可能是巧合

我有一个简单的节流观测,我同意:

    this.throttledValue.subscribe(function (newValue) {
        return datacontext.checkComparisonExists(comparisonCode()).then(function (res) {
            isDuplicateComparisonCode(res);
        });
    });
我将ajax查找的结果(真/假)推送到我的
isDuplicateComarisonCode
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
),并且输入的代码不是重复的(
!idupplicateComarisonCode

这里的关键点。。。这是工作一周/两周前,因为我有几个测试项目保存,我只能保存时,保存按钮启用,显然!我已经一个多月没有编辑过应用程序这一部分的任何代码了,所发生的一切就是knockout已经更新了

在chrome的debug中,
throttledValue.subscribe
函数每次都被正确点击,我可以看到
isDuplicateComarisonCode
observable被成功更新为真值或假值

然而,
canSave
var函数在页面加载时只被点击一次,然后它似乎只是将该值缓存为“false”,因此禁用了我的保存按钮,而不管(isDuplicateComarisonCode)中包含的一个观察值是否被更改。我希望每次更新一个组成的观测值时,
canSave
函数都会被命中,是吗


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

您是否在其他地方使用
canSave
?您是否尝试在
canSave
之外启用/禁用此按钮?两个问题均为否。上面的html是唯一一个引用了
canSave
Ok,您能显示viewmodel的某些部分吗?我很惊讶,
isDuplicateComarisonCode
被称为全局代码。最后一件事:我想你肯定
有变化
!isSaving
是真的吗?它们是否是真的都是无关紧要的,因为
canSave
功能甚至没有在现场被点击。每次我更改代码时,开发服务器上的同一代码都会被命中,
isDuplicateComarisonCode
observable会被更新。与我的开发机器上使用的调试相比,可能与缩小的敲除js库有关?尝试添加以下内容:观察hascanges和issaving。如果有变化或!isSavings为false isDuplicateComparisonCode的值与canSave无关。(淘汰提高了重新评估的需要,可能会“选择”不重新运行cansave)