我正在页面中使用KnockoutJS和MVVM,并且大多数情况下都可以使用,但是我无法使所有绑定(bind)重新评估。例如,我有一个要在满足某些条件时启用的按钮:

<input type="submit" value="Purchase" data-bind="{enable: IsPurchaseValid}" />

IsPurchaseValid是我的 View 模型的计算函数:
viewModel.IsPurchaseValid = ko.computed(function() {
console.log("IsPurchaseValid: function entered...");

if (this.Duration() == null ||  this.Total() <= 0 || this.SelectedPackageId() < 0) {
    console.log("IsPurchaseValid: Something is missing...");
    return false;
}

return this.IsLocalityCountValid();
}, viewModel);

加载页面后,该按钮已正确禁用,但从不重新评估。 IsLocalityCountValid是另一个计算函数,console.log语句表明它返回true。 Chrome的控制台未显示脚本错误。

如何获得启用绑定(bind)以正确重新评估?我还具有一个绑定(bind)到!IsLocalityCountValid的可见范围,该范围从不可见。我觉得我缺少一些基本的东西,但无法弄清楚它可能是什么。

最佳答案

我在启用它的地方有一个非常基本的repro。 (请参见下面的 fiddle )

我建议您检查一下CSS。我曾经遇到这个问题,因为我以某种方式删除了我的button:disabled样式。我的按钮样式改变了背景颜色和字体颜色,但是我不知何故
删除了button:disabled style ....的最终结果是,当禁用它时,它看起来与启用时完全相同。

无论如何,您可以在此处测试按钮的启用/禁用:您可以在此处自己测试:http://jsfiddle.net/johnpapa/wLKS6/

没有CSS干扰时,我就不会发生此问题。因此,关键可能是确保您的CSS类首先运行。

关于mvvm - 您可以强制KnockoutJS重新评估绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8638565/

10-12 13:03