Проверка наблюдаемых в коллекции с помощью Knockout Validation

У меня есть поле сообщения и коллекция people, связанных в неупорядоченном списке, каждый из которых сопровождается раскрывающимся списком цветов и выбором по умолчанию.

Проверка в поле сообщения работает, текст стирается, и отображается ошибка, а количество ошибок увеличивается. Однако, когда вы изменяете одну из записей раскрывающегося списка на «Выбрать..» (фактически отменяя выбор параметра), вы правильно получаете сообщение «это поле обязательно», однако объект errors не обновляется. Очевидно, это должно иметь какое-то отношение к тому факту, что это коллекция? Посмотрите, что я имею в виду, когда вы нажимаете кнопку отправки или просматриваете привязку данных диапазона.

Мне также нужна проверка, чтобы включить динамически добавленные строки, поэтому, когда вы нажимаете «добавить другую строку», мне нужно, чтобы объект ошибок также увеличивался.

http://jsfiddle.net/goneale/TJGS3/

Может ли кто-нибудь взглянуть на это и помочь мне вообще?


person GONeale    schedule 26.04.2013    source источник


Ответы (1)


Обновление: в последней версии библиотеки проверки можно использовать параметр live: true, чтобы заставить ее прослушивать observableArrays.

grouping: { deep: true, observable: true, live: true }

http://jsfiddle.net/fYrbt/29/

Старый ответ:

К сожалению, группа не переоценивается при вставке нового элемента. Подпишитесь на массив и сделайте это явно.

this.items.subscribe(function() {
     this.errors = ko.validation.group(this);
     this.errors.showAllMessages();
}, this);

http://jsfiddle.net/fYrbt/

person Anders    schedule 26.04.2013
comment
На самом деле, добавление только этой строки ko.validation.init({ grouping: { deep: true } }); полностью устраняет все мои проблемы и позволяет переоценивать новые элементы. Если я использую часть observable: true, которую вы также указали, это не так. Я дам вам точку :) - person GONeale; 27.04.2013
comment
@Anders Как я могу заставить группу переоценивать, когда каждый элемент в группе изменяется, без повторной инициализации при каждом изменении элемента массива? Спасибо! - person Uri Abramson; 01.10.2015