knockout change validation knockout.js ko.dependentobservable

validation - change - Manualmente obtener knockout para volver a evaluar un dependiente observable



ko observable (2)

No estoy seguro si esto es posible, pero tengo un escenario donde tengo un sistema de validación que notifica a mi sistema de validación cuando algo se ha convertido en válido / inválido a través de un observable dependiente. Ahora esto funciona muy bien cuando un usuario está completando un formulario, ya que dependdantObservable se aleja del valor de los valores observables subyacentes. (es decir, si la propiedad Nombre cambia, volverá a evaluar el observable dependiente de isValid , que a su vez notificará mi enlace, que se engancha en el sistema de validación).

Ahora mi problema es que si el usuario no toca el formulario y simplemente va directamente a la presentación, no activará el enlace, ya que los valores subyacentes no han cambiado para ningún elemento observable, por lo que ningún suscriptor sabrá sobre cambios de validación sucediendo. Idealmente, no quiero pasar por cada elemento observable y volver a asignarle su variable actual para impulsar una evaluación de validación, lo que a su vez desencadenaría un cambio en el estado de validación. Así que, como realmente todo lo que quiero hacer es obtener este es isValid para actualizar por falta de una palabra mejor.

Parece bastante desagradable de cualquier manera, pero mis opciones parecen ser:

1) Forzar un cambio de valor en todos los observables que se validan contra (horrible) 2) Forzar una reevaluación de isValid dependdantObservable para activar el suscriptor (menos horrible, pero aún malo) 3) Volver a escribir la biblioteca de validación para exponer un forceValidation() función que de alguna manera desencadenaría que todo se vuelva a evaluar, evitando la necesidad de que los observables subyacentes activen la canalización de validación.

¿Algunas ideas?


Agregue el enlace enable: formValid donde formValid = ko.computed(return true if all values are valid) para enviar el botón. De esta forma el usuario no puede enviar hasta que el formulario se haya llenado correctamente.

Utilice ko.validation.validateObservable(yourDependentObservable) para revalidar el campo manualmente

o use yourObsevable.notifySubscribers() si yourDependentObservable depende de su yourObservable .


En su observable calculado ( isValid ) puede llamar a notifySubscribers(currentValue) , que notificará a los suscriptores con el valor actual. No volverá a evaluar el cálculo y simplemente notificará a los suscriptores con el valor actual.