Проверка нокаута в массиве

Я использую проверку нокаута для проверки поля в массиве. Он отобразит сообщение об ошибке, но я не могу получить 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
    });