#knockout.js #knockout-validation
#knockout.js #выбивание-проверка
Вопрос:
У меня есть viewmodel, и у него есть наблюдаемое, и есть некоторые проверки, которые я применил к нему.
Теперь, когда я использую пользовательскую validationMessage
привязку для отображения ошибки, я получаю следующую ошибку в библиотеке проверки ko:
<script type="text/html" id="TEXTBOX_Template">
<input type="text" data-bind="value: question().s_answer" />
<span class="validationMessage"
data-bind="validationMessage: question().s_answer"></span>
</script>
Я использую последнюю версию как ko, так и ko-validation.
Моя настройка следующая:
ko.validation.init({ decorateInputElement: false,
messageTemplate: 'error_Template' });
ko.validation.makeBindingHandlerValidatable("selectedOptions");
Шаблон ошибки (но не требуется в этом примере, поскольку я хочу использовать validationMessage
):
<script type="text/html" id="error_Template">
<!-- ko if: (field.isModified() amp;amp; !field.isValid()) -->
<span class="validationMessage" data-bind="text: field.error"></span>
<!-- /ko -->
</script>
Если это работает с observable, то это должно работать и с observableArray, потому что у меня есть список переключателей, использующих ko foreach, и когда выполняется проверка, ошибка отображается после каждой из входных переключателей.
Любые предложения помогут!
Спасибо
Комментарии:
1. Я не понимаю, какой jsFiddle вы даете. Похоже, это не имеет ничего общего с вашим вопросом (нет шаблона, нет тега ввода …). Здесь нам нужна дополнительная информация, например, ваша viewmodel
2. Спасибо за очистку битов. Извините за jsFiddle, это было просто для игры. Проверка отлично работает в jsFiddle, но не в моем коде. Сейчас я его удалил. Таким образом, проблема возникает как в элементах управления input, так и в select.
Ответ №1:
Существует некоторая проблема с привязкой ValidationMessage, поэтому нам нужно явно расширить наблюдаемое, чтобы оно было поддающимся проверке.
Добавьте приведенную ниже строку в knockout.validation.js файл в обработчике привязки ValidationMessage:
obsv.extend({ validatable: true });
Надеюсь, это будет исправлено в следующей версии, добавлена проблема в ko.validation. Или, по крайней мере, это сработало для меня, дайте мне знать, если я ошибаюсь? Или есть способ получше?