Я чувствую, как это должно быть, было предложено раньше, но я смотрел наKnockoutjs: обновить привязок после заполнения списка выбора
- Knockout JS binding initial value of dropdown list
- Knockout does not sync manual set of option's selected attribute
- How to pre-select an option in a dropdown knockout js
и
Но эти проблемы были не такими, с которыми я столкнулся.
На мой взгляд, я получаю viewmodel от вызова ajax. В этом объекте находится идентификатор страны. При последующем вызове ajax я извлекаю список стран (имя и идентификатор) и заполняю поле выбора из списка.
поле выбора связанно с ViewModel в стране ID с помощью
<select data-bind="value: CountryId"/>
Но когда я заполнить выпадающий список, предварительно не выбрана страна ViewModel в. Мне нужно вручную вызвать ko.applyBindings (vm), что является проблемой, поскольку данные заполняются из плагина jQuery, который обрабатывает каскадные поля выбора. У него нет ссылок на viewmodel (и я не хочу его предоставлять). Я мог бы вызвать обратный вызов, но это немного зевает.
Я создал a fiddle, что более подробно иллюстрирует эту проблему. Если вы нажмете кнопку Test Select, вы заметите, что раскрывающийся список предварительно выбран в Item 0. Раскомментируйте строку на панели js, а Боб - ваш дядя.
Что я не получу здесь? Разве это не основная функция нокаута?
-Jules
Я не думаю, что вы сможете делать то, что вы пытаетесь сделать. Связывание значений установит слушателя на «изменение» для выбора, чтобы реагировать при выборе новой опции. Вы просто добавляете опции для выбора, поэтому Knockout не знает, что он должен что-то делать.Даже если бы он знал, он сбросил бы значение до 0, потому что ваши параметры не указывают, какая строка выбрана - значение будет выбрано. –
Думаю, вы, возможно, правы. На данный момент я пошел с механизмом обратного вызова, однако у меня проблема с этим. Обновите вопрос с помощью новой информации. –
Поцарапайте это, я решил вторую проблему. В ближайшее время опубликует ответ на этот вопрос. –