mvvm - 你能强制 KnockoutJS 重新评估绑定(bind)吗?

标签 mvvm knockout.js

我在一个页面中使用了 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 样式....所以最终结果是当它被禁用时,它看起来与启用时完全相同。

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

当没有 CSS 干扰时,这个问题并没有发生在我身上。所以关键可能是确保你的 CSS 类首先表现出来。

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

相关文章:

javascript - 使用 knockoutjs 调用 ajax 后,数据未按应有的方式绑定(bind)

c# - 在 WPF DataGrid 中使用 Enter 键作为 Tab

WPF 绑定(bind)和资源查找复杂性

WPF,MVVM 使用另一个组合框所选项目填充组合框

javascript - "Uncaught TypeError: Unable to process binding"与 KnockoutJS

javascript - 通过 knockout 更改复选框的动态值需求

.net - 如何在 WPF MVVM 中使用用户控件

android - 我可以获取 ViewModel 的 init block 内的上下文吗?

asp.net-mvc - MVC3、Knockout.js 和嵌套的 json 对象

knockout.js - 当父对象设置为 null 时,Knockout 失去与内部可观察对象的绑定(bind)