проверка нокаута с помощью плагина typeahead combobox

Я пытаюсь использовать Knockout Validation в сочетании с плагином Bootstrap Combobox.

У меня есть элемент управления select, который привязан к моему наблюдаемому свойству, которое имеет обязательный атрибут (для проверки KO).

 <select data-bind="attr: { options: TypeAheadSource, value: XYZ, validationOptions: {errorElementClass: 'input-validation-error'}, typeaheadCombobox: {}"></select>

У меня есть пользовательская привязка, связанная с элементом управления select, в котором я просто вызываю плагин Bootstrap Combobox. Это создает Div с элементом управления вводом над элементом управления выбора и скрывает элемент управления выбора.

Проверка нокаута запускается, когда я не выбираю значение в поле со списком и показывает сообщение об ошибке рядом с элементом управления, НО поле не выделено. Вот как это выглядит

введите здесь описание изображения

Как видите, сообщение об ошибке появляется, но поле ввода не выделено.

Вот окончательный HTML-код, который генерируется при срабатывании проверки.

    <div class="combobox-container">
    <input style="position:static;" type="text" autocomplete="off" data-bind="{ value: Name, validationOptions: { errorElementClass: 'input-validation-error' }" class="input-large">
<span class="add-on btn dropdown-toggle" data-dropdown="dropdown"><span class="caret"></span>
<span class="combobox-clear"><i class="icon-remove"></i></span></span>
<select data-bind="validationOptions: { errorElementClass: 'input-validation-error' }, options: TypeAheadSource, value: Name, typeaheadSimpleCombobox: { }" class="combobox input-validation-error"></select>
    </div>

Как вы можете видеть, элемент управления select (который был скрыт плагином) получает класс ошибки проверки, который я определил ('input-validation-error'), но элемент управления вводом, созданный плагином, этого не делает. Это главная проблема здесь.

Итак, я подумал, что это может быть связано с тем, что элемент управления вводом не связан напрямую со свойством. Итак, я попытался добавить ту же привязку значения, что и элемент управления select, к элементу управления вводом, созданному плагином внутри пользовательской привязки. Я также добавил привязку validationOptions. Эти изменения тоже не сработали.

Странно то, что у меня также есть текстовое поле ввода текста, привязанное к другому свойству, которое использует аналогичный дизайн (пользовательская привязка для создания плагина ввода текста над элементом управления вводом), и проверка + выделение отлично работают на этом. Вот окончательный html из этого.

<input type="text" data-bind="value: xyz, validationOptions: { errorElementClass: 'input-validation-error' }, typeaheadTextBox: { source: $data.TypeAheadSource }" class="typeaheadValue input-mini" data-provide="customtypeahead" autocomplete="off">

Может ли кто-нибудь сказать мне, если я пропускаю какие-либо дополнительные шаги. Я уверен, что вам может понадобиться больше деталей. Пожалуйста, оставьте комментарий, и я постараюсь добавить больше деталей.

Спасибо.


person Krishna Teja Veeramachaneni    schedule 19.05.2013    source источник
comment
Кажется, я знаю, в чем проблема. Несмотря на то, что я устанавливаю привязки значений для элемента управления вводом, созданного плагином, привязки применяются до создания элемента управления, поэтому мне нужно повторно применить привязки конкретно к элементу управления вводом, созданному плагином.   -  person Krishna Teja Veeramachaneni    schedule 20.05.2013


Ответы (1)


Я понял проблему. Если у кого-то такая же проблема, вот что я сделал. Несмотря на то, что я настроил привязки значений для элемента управления вводом, созданного плагином, привязки были применены до создания элемента управления, поэтому мне пришлось повторно применить привязки конкретно к элементу управления вводом, созданному плагином. Это помогло мне.

person Krishna Teja Veeramachaneni    schedule 20.05.2013
comment
Я бы не подумал, что вам нужно будет повторно применять какие-либо привязки... возможно, стоит взглянуть на ваш собственный обработчик привязок, чтобы увидеть, есть ли там что-то. Я сделал именно то, что вы описали для другого проекта, но использовал элемент управления select2, и он отлично работает. - person GotDibbs; 20.05.2013
comment
Я не уверен, как это делает select2, но вот мой вопрос. Я создаю плагин в своей пользовательской привязке, которая сама будет вызываться при выполнении ko.applybindings. Правильно? Теперь, если элемент управления добавляется в DOM после выполнения первого применения привязок, как новый элемент управления, созданный плагином, будет связываться с наблюдаемым свойством, если мы не сообщим ему, к чему привязываться? Может быть, select2 делает что-то по своей сути, чтобы обеспечить синхронизацию элементов управления select и input. Я попробую и проверю. - person Krishna Teja Veeramachaneni; 21.05.2013
comment
Я привязал значение элемента управления вводом к фактическому наблюдаемому в моей модели, а затем создал отдельную пользовательскую привязку для элемента управления выбора, которому я только что передал набор статических параметров. Пользовательский обработчик привязки инициализирует элемент управления, а затем в функции обновления я просто запускаю событие изменения элемента управления. Посмотрите на пример, на котором я основывал свою реализацию: github.com/ivaynberg /select2/wiki/Knockout.js — Интеграция - person GotDibbs; 21.05.2013