手动获取挖空以重新评估依赖者可观察



我不确定这是否可能,但我有一个场景,我有一个验证系统,当某些东西通过依赖的可观察对象变得有效/无效时,它会通知我的验证系统。现在,当用户填写表单时,这非常有用,因为依赖可观察量被驱赶出基础可观察量值更改。(即,如果 Name 属性更改,它将重新评估isValid依赖的可观察量,这反过来会通知我的绑定哪个钩子到验证系统(。

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

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

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

有什么想法吗?

在计算的可观察量(isValid(上,你可以调用notifySubscribers(currentValue),这将通知任何订阅者当前值。 它不会重新评估计算结果,而只会通知订阅者当前值。

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

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

或者使用yourObsevable.notifySubscribers()如果yourDependentObservable取决于yourObservable

最新更新