Я пытаюсь настроить группу проверки для отображения ошибок после нажатия кнопки.
Моя проблема заключается в том, что я не могу заставить группу проверки корректно обновляться каждый раз, когда изменяется ошибка проверки.
В моем примере я вижу, что свойство .errors наблюдаемого поля корректно обновляется каждый раз, когда я покидаю текстовое поле (предназначенное). Для группы проверки документация указывает на вызов .showAllMessages() или оценку самой группы.
Я создал пример ниже. Краткое изложение поведения, которое я вижу:
- При загрузке отображается сообщение о необходимости проверки (хорошо)
- Всякий раз, когда ошибка проверки изменяется в поле, группа проверки не обновляется (grrrr)
- Как только поле станет полностью действительным, группа проверки будет обновлена (хорошо)
- Как только поле становится недействительным после того, как оно стало действительным, оно будет обновлено первым сообщением проверки, но не будет обновляться должным образом, как указано выше.
В примере я настроил эти проверки для одного поля:
- требуется
- минДлина: 3
- максимальная длина: 10
- числовой
Вид:
<label>Test number</label>
<input type="text" data-bind="value: myNumber"/>
<div>myNumber error: <span data-bind="text: myNumber.errors"/></div>
<div>Validation group:
<ul data-bind="foreach: validationGroup"><li data-bind="text: $data"></li></ul>
</div>
<button type="submit" class="btn" data-bind="click: testValidate">Update validation group</button>
Модель представления:
var viewModel = {
myNumber: ko.observable().extend({
maxLength: 10,
number: {
message: "Please ensure that myNumber contains only numeric characters"
},
required: {
message: "myNumber is required"
},
minLength: 3
})
};
viewModel.validationGroup = ko.validation.group([viewModel.myNumber]);
viewModel.testValidate = function () {
// Try both, to be sure...
viewModel.validationGroup.showAllMessages();
viewModel.validationGroup();
};