У меня есть страница с выделенным ящиком и поле ввода, связанное с тем же значением. Идея состоит в том, что обычно выбирается значение из выбора, однако пользователь должен также иметь возможность вводить произвольную строку в поле ввода. Проблема в том, что если я введу что-то, отсутствующее в select, из-за привязки, значение будет установлено на первый элемент в select.Обмен нокаутом и привязка обмена текстовыми полями
Это поведение я хочу добиться:
Пользователь выбирает значение из выбора
- задано значение выбранного элемента.
- Ввод обновляется с выбранным значением.
Пользователь вводит текст на входе
- Значение устанавливается на введенный текст.
- Выбрать не изменяется если Значение присутствует в коллекции доступных значений.
Другими словами, я хочу, чтобы последний измененный элемент управления был действительным значением. Но я также хочу, чтобы оба элемента управления были в актуальном состоянии , пока данное значение действительно для этого элемента управления.
Мой код выглядит следующим образом:
JS
var viewModel = { Value: ko.observable('1'), Set: ['1', '2', '3'] };
ko.applyBindings(viewModel);
HTML
<!-- ko if: Set.length > 1 || (Set.length > 0 && Set[0] != '') -->
<select type="text" class="form-control input-small" data-bind="options: Set, value: Value">
</select>
<!-- /ko -->
<input class="form-control input-small" data-bind="value: Value" style="margin-top: 5px;" />
Вот является jsfiddle, показывающий, как в настоящее время работает код: http://jsfiddle.net/b2RwG/
[Изменить]
Я нашел рабочее решение (http://jsfiddle.net/b2RwG/2/), однако это действительно некрасиво, и должен быть лучший способ решить эту проблему.
Я ищу сделать то же самое, и в то время как вы сделали решить в вашей скрипке я согласен, что это не самое красивое решение. Вы когда-нибудь находили более простой способ достичь этого? – powerbuoy
Простите, но это так давно, я даже не помню проблемы и не использовал ее. Поэтому у меня нет хорошего решения для вас. – Alxandr