Knockout.js 即使计算出的敲除值中的可观察值正在更改,也不会重新评估
我注意到,最近在我的应用程序中运行良好的一些东西似乎不太好,这与在visual studio中将nuget中的knockout更新为2.3.0不谋而合——当然,这可能是巧合 我有一个简单的节流观测,我同意: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) {
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)