28

我不确定这是否可能,但我有一个场景,我有一个验证系统,当某些东西通过依赖的 observable 变得有效/无效时,它会通知我的验证系统。现在,当用户填写表单时,这非常有用,因为dependantObservable 被驱动了底层可观察值的变化。(即,如果 Name 属性发生变化,它将重新评估isValid依赖的 observable,这将反过来通知我的绑定哪些钩子进入了验证系统)。

现在我的问题是,如果用户根本不接触表单而直接提交,它不会触发绑定,因为任何可观察对象的基础值都没有改变,所以没有订阅者会知道任何验证更改正在发生。理想情况下,我不想遍历每个 observable 并重新为其分配当前变量以推动验证评估,这反过来又会触发验证状态的变化。所以我真正想做的就是让这个isValiddependantObservable因为没有更好的词而刷新

无论哪种方式看起来都很讨厌,但我的选择似乎是:

1) 强制对所有被验证的 observables 进行值更改(可怕) 2) 强制重新评估 isValiddependantObservable 以触发订阅者(不那么可怕,但仍然很糟糕) 3) 重新编写验证库以公开一个forceValidation()函数这会以某种方式触发重新评估所有内容,从而绕过底层可观察对象触发验证管道的需要。

有任何想法吗?

4

2 回答 2

51

在您计算出的 observable ( isValid) 上,您可以调用notifySubscribers(currentValue),它会用当前值通知任何订阅者。它不会重新评估计算的值,只会用当前值通知订阅者。

于 2012-03-01T16:19:13.507 回答
4

添加绑定到enable: formValid哪里formValid = ko.computed(return true if all values are valid)提交按钮。这样用户在正确填写表单之前无法提交。

用于ko.validation.validateObservable(yourDependentObservable)手动重新验证字段

或使用yourObsevable.notifySubscribers()ifyourDependentObservable取决于yourObservable.

于 2013-10-09T14:57:27.433 回答