Я довольно новичок в knockoutjs, поэтому есть очень хорошая возможность, что это существует, и я просто не искал правильную вещь.Как сделать множественный выбор, но не пустой
У меня есть элемент <select>
, который может иметь несколько вариантов выбора. При загрузке я хочу, чтобы ничего не было выбрано, но я не хочу запускать проверку у пользователя, прежде чем они что-либо сделают. Я могу запустить проверку, если что-то выбрано и не выбрано, или маленькая кнопка «none», которая опустошает выбранный массив. Это отлично. Моя <select>
выглядит следующим образом:
<select multiple data-bind="options: PossibleValues,
selectedOptions: SelectedValues,
validationCore: SelectedValues">
</select>
Как я уже сказал, если я явно опорожнить SelectedValues
, то я получаю мое сообщение проверки на стороне клиента. Если я этого не сделаю, то isValid()
вернет true, и я не вижу сообщений.
Итак, как я могу сделать требуемый множественный выбор и выполнить проверку отказа при отправке, если он пуст, но не выделить его как проблему при загрузке?
EDIT
Я пытался упростить мой пример для моего вопроса, но в основном у меня есть ViewModel, которая имеет ребенка ViewModel и что ребенок имеет объект, который является ko.observable()
и также является ViewModel. Затем он получает этот дочерний объект, который является ko.observableArray()
ViewModels. Этот самый низкий уровень - это то, где я пытаюсь увидеть ошибки проверки (добавление { deep: true }
только кричит о том, чтобы быть слишком глубоким). Проблема в том, что самый низкий уровень - назовем его greatgrandchildVM
- возвращает true, когда я звоню isValid()
, несмотря на то, что он очень явно недействителен. Looping через массив greatgrandchildVM
позволяет мне видеть, что errors()
имеет в нем значения.
Почему они не пузырятся и бросают isValid()
в ложь? Очевидно, я могу взломать цикл for, чтобы перебрать мой массив greatgrandchildVM
и сделать это сам, но я предполагаю, что есть способ нокаутировать это, и я слишком новичок, чтобы его еще узнать.
Могут ли вы поставить скрипку вместе? – Luis