Источник данных combobox knockout-kendo не обновляется после его визуализации?
Я работаю над веб-приложением, использующим библиотеки knockout-kendo.js. Моя проблема заключается в том, что после того, как я связал kendoComboBox с источником данных observableArray. Поле со списком не отражает изменения, внесенные в массив observableArray.
Вот мой связанный комбобокс:
<input data-bind="kendoComboBox: { dataTextField: 'name', dataValueField: 'id', data: choices, value: selectedChoice, template: '<span>Name: #: data.name # </span>' }" />
Вот моя модель представления:
var ViewModel = function() {
this.choices = ko.observableArray([
{ id: "1", name: "apple"},
{ id: "2", name: "orange"},
{ id: "3", name: "banana"}
]);
this.AddChoice = function () {
choices().push(new { id: "4", name: "frank" });
}
this.selectedChoice = ko.observable();};
ko.applyBindings(new ViewModel());
Пожалуйста, смотрите следующее jsfiddle:
http://jsfiddle.net/austinpantall/chNW8/
Обратите внимание, что происходит при нажатии кнопки, чтобы добавить элемент в источник данных observableArray. В выпадающем списке новый элемент не отображается как опция.
Я довольно новичок в нокауткендо и ищу обходной / альтернативный способ, чтобы новые элементы появлялись в комбинированном списке.
Спасибо заранее, Остин
1 ответ
Не уверен, что это все еще проблема для вас, но я наткнулся на этот вопрос, глядя на другую проблему для себя. Это решение предполагает использование jQuery, но я думаю, что это то, что вы ищете:
HTML:
<div id="wrapper">
<input data-bind="kendoComboBox: { dataTextField: 'name', dataValueField: 'id', data: choices, value: selectedChoice, template: '<span>Name: #: data.name # </span>' }" />
<hr/>
Selected: <strong data-bind="text: selectedChoice"> </strong>
<input type="button" data-bind="click: AddChoice" value="Add Choice" />
</div>
JS / Knockout / jQuery:
var ViewModel = function() {
this.choices = ko.observableArray([
{ id: "1", name: "apple"},
{ id: "2", name: "orange"},
{ id: "3", name: "banana"}
]);
this.AddChoice = function () {
choices.push({ id: "4", name: "frank" });
}
this.selectedChoice = ko.observable();
};
ko.applyBindings($('#wrapper'), ViewModel());
Я настроил ваш jsFiddle с версией, которая дает ожидаемый результат:
Надеюсь это поможет...