【发布时间】:2011-12-26 19:29:58
【问题描述】:
我在一个页面中使用了 KnockoutJS 和 MVVM,并且大多数情况下都可以使用,但是我无法让所有绑定重新评估。例如,我有一个按钮,我想在满足某些条件时启用它:
<input type="submit" value="Purchase" data-bind="{enable: IsPurchaseValid}" />
IsPurchaseValid 是我的视图模型的计算函数:
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 的控制台没有显示脚本错误。
如何正确地重新评估启用绑定?我还有一个可见绑定到 !IsLocalityCountValid 的跨度,它永远不会变得可见。我觉得我错过了一些基本的东西,但无法弄清楚它可能是什么。
【问题讨论】:
-
第二个问题,请尝试
!IsLocalityCountValid()。 Knockout 只检测某些表达式中的可观察对象的名称,并且您必须在其他表达式中显式调用可观察对象,否则它会被评估为Function,而始终是true。 -
@JeffreyYasskin - 这确实解决了第二个问题。我在“启用”问题上尝试过,但没有任何变化。
-
你能把你的问题发一个 jsfiddle 吗?
-
很奇怪,当我将它隔离在 JSFiddle 中时,按钮和提交都可以工作,但在实时站点中(无法共享)只有按钮有效。 jsfiddle.net/joelcochran/ssbW2
标签: mvvm knockout.js