Проверка нокаута в массиве
Я использую проверку нокаута для проверки поля в массиве. Он отобразит сообщение об ошибке, но я не могу получить isValid() или ko.validation.group() для работы. Мне нужно, чтобы один из них обрабатывал submit.
errors = ko.validation.group(contactList(), {deep:true});
Вот скрипка: http://jsfiddle.net/mduey/hEJWJ/80/
Спасибо!
Ответы
Ответ 1
Проблема заключается в том, что проверка не выполняется при добавлении новых элементов массива в ваш observableArray
. Вот быстрое грязное решение, которое можно оптимизировать дальше.
Каждый раз, когда вы добавляете новый элемент в свой observableArray
, я запускаю проверку, помещая результат в наблюдаемый, чтобы его можно было правильно отслеживать с помощью привязок вида. Его можно улучшить с помощью параметра throttle
, поэтому проверка не будет выполняться для каждого нажатия на массив (актуально для циклов). Как я вижу, в настоящее время ko.validation.group
возвращает не надлежащее наблюдаемое, как должно, поэтому мне пришлось создать для него обертку.
Ответ 2
У меня была такая же проблема, и ее можно решить, установив для свойства наблюдаемой конфигурации значение false. Это вызывает глубокую проверку каждый раз, когда вызывается функция ошибок:
ko.validation.init({
grouping: {
deep: true,
observable: false //important ! Needed so object trees are correctly traversed every time so added objects AFTER the initial setup get included
},
insertMessages: true,
messagesOnModified: true,
debug: false
});