Вручную получить нокаут, чтобы переоценить зависимый объект - PullRequest
28 голосов
/ 01 марта 2012

Я не уверен, возможно ли это, но у меня есть сценарий, в котором у меня есть система проверки, которая уведомляет мою систему проверки, когда что-то становится действительным / недействительным через зависимую наблюдаемую информацию.Теперь это прекрасно работает, когда пользователь заполняет форму, так как depenndantObservable отталкивается от изменения значения базовых наблюдаемых.(т. е. если свойство Name изменяется, оно повторно оценивает зависимую наблюдаемую isValid, которая, в свою очередь, уведомляет мою привязку, которая подключается к системе проверки).

Теперь моя проблема заключается в том, что если пользователь неЕсли вы вообще не трогаете форму и просто переходите к отправке, она не будет вызывать привязку, поскольку базовые значения не изменились для каких-либо наблюдаемых, поэтому подписчики не будут знать о каких-либо изменениях проверки.В идеале я не хочу проходить через каждую наблюдаемую и переназначать ее текущую переменную, чтобы провести оценку валидации, которая, в свою очередь, вызовет изменение в состоянии валидации.Так что, на самом деле, все, что я хочу сделать, - это установить isValid depenndantObservable на refresh из-за отсутствия лучшего слова.

В любом случае это выглядит довольно неприятно, но мои варианты кажутся либо:

1) Принудительно изменить значение для всех наблюдаемых, проверяемых по (ужасному) 2) Принудительно переоценить isValid зависимыйObservable, чтобы вызвать подписчика (менее ужасный, но все же плохой) 3) Переписатьбиблиотека валидации для предоставления функции forceValidation(), которая каким-то образом инициирует переоценку всего, обходя необходимость в базовых наблюдаемых для запуска конвейера валидации.

Есть идеи?

Ответы [ 2 ]

51 голосов
/ 01 марта 2012

На вашем вычисленном наблюдаемом (isValid) вы можете позвонить notifySubscribers(currentValue), который уведомит всех подписчиков о текущем значении.Он не будет повторно оценивать вычисленные значения и просто уведомит подписчиков с текущим значением.

4 голосов
/ 09 октября 2013

Добавить привязку enable: formValid, где formValid = ko.computed(return true if all values are valid), чтобы отправить кнопку. Таким образом, пользователь не сможет отправить запрос, пока форма не будет заполнена правильно.

Используйте ko.validation.validateObservable(yourDependentObservable) для повторной проверки поля вручную

или используйте yourObsevable.notifySubscribers(), если yourDependentObservable зависит от yourObservable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...