Kendo UI Dropdownlist привязка данных значения
Я использую выпадающий список Kendo UI внутри списка
<ul data-role="listview" id="participants-listview" data-style="inset" data-template="participants-listview-template" data-bind="source: participants, events { click: onSelectParticipant }" />
<script type="text/x-kendo-template" id="listview-template">
<div>
<span>#:RoleDesc#</span>
<span>
<select data-role="dropdownlist" id="status-id"
data-text-field="StatusDesc"
data-value-field="StatusId"
data-bind="value: StatusId, source: participantStatuses, events: { change: onParticipantStatusChange }"
name="Status"
required="required"
validationMessage="required">
</select>
</span>
</div>
</script>
модель представления
viewModel = kendo.data.ObservableObject.extend({
dataSource: new kendo.data.DataSource({
transport: {
type: "odata",
read: {
url: function() {
return meetings/participants";
}
}
}
}),
participants: [], //listview data
participantStatuses: [ // dropdownlist selection
{ StatusId: 1, StatusDesc: "Invited" } ,
{ StatusId: 6, StatusDesc: "Present" },
{ StatusId: 7, StatusDesc: "Absent" }
],
selectedParticipant: null,
showListView: function(e) {
viewModel.dataSource.fetch(function(){
var data = viewModel.dataSource.data();
meetingViewModel.set("participants", data);
});
},
Я ожидаю, что при загрузке страницы выбранный statusId участников будет записан в раскрывающемся списке как selectedValue путем привязки участников. StatusId
к value
свойство выпадающего, как это data-bind="value:StatusId"
, Но в моем случае это странно, выдает ошибку
Uncaught TypeError: Object #<Object> has no method 'get'
когда я удалил data-bind="value:StatusId"
ошибка исчезла, но она не выбрала соответствующее выбранное значение.
Есть идеи об этой ошибке?
1 ответ
Я вижу две возможные проблемы.
Во-первых, ваш data-bind="value: StatusId"
, Является StatusId
в тебе ViewModel? Я не вижу его, но это расширенный объект, поэтому он может быть определен до вставленного вами кода.
Вторая проблема, которая, на мой взгляд, совсем не очевидна, заключается в том, что выпадающий список возвращает полный объект из вашего источника данных списка; не только запрошенное свойство / поле.
Посмотрите эту демонстрационную страницу на их веб-сайте для примера: http://demos.kendoui.com/web/mvvm/widgets.html
В частности, они используют вспомогательную функцию для возврата строкового представления объекта. Вы могли бы вместо этого вернуть только StatusId
как ты хочешь.
<h4>DropDownList </h4>
<select data-role="dropdownlist"
data-text-field="name" data-value-field="value" data-bind="source: colors, value: dropDownListValue">
</select>
Сценарий:
dropDownListValue: null,
displayDropDownListValue: function() {
var dropDownListValue = this.get("dropDownListValue");
return kendo.stringify(dropDownListValue);
}
Это кажется довольно запутанным, но я только сам проработал это, и это не должно быть слишком большой сделкой, чтобы учесть это в будущем.