手动获取knockout以重新评估dependantObservable

Gro*_*fit 28 validation ko.dependentobservable knockout.js

我不确定这是否可行,但我有一个场景,我有一个验证系统,当一些东西通过一个依赖的observable变得有效/无效时通知我的验证系统.现在,当用户填写表单时,这非常有效,因为dependantObservable是从基础observables值更改驱动的.(即,如果Name属性发生更改,它将重新评估isValid依赖的observable,它将依次通知我绑定到验证系统的绑定).

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

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

1)对所有被验证的observable强制进行值更改(可怕)2)强制重新评估isValid dependantObservable以触发订阅者(不太可怕,但仍然不好)3)重写验证库以公开forceValidation()函数这将以某种方式触发所有要重新评估的内容,从而绕过底层observable触发验证管道的需要.

有任何想法吗?

RP *_*yer 51

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

  • @RPNiemeyer关于它的工作方式有什么变化吗?在2.3.0我得到错误`对象...没有方法'valueHasMutated'`,而调用`myComputed.notifySubscribers(myComputed())`没有给我这样的错误... (10认同)