#c# #asp.net-mvc #knockout.js
#c# #asp.net-mvc #knockout.js
Вопрос:
У меня есть случай, когда у меня есть список элементов, и для каждого из них мне нужно отобразить выпадающий список, который редактирует определенное поле
случается так, что когда я редактирую выделение и сохраняю, изменение привязывается и сохраняется правильно.
но когда я загружаю страницу в первый раз, все выбранные значения отражают самый первый элемент (значение игнорируется)
<tbody data-bind="foreach: Model.Items">
///something
<select data-bind="value: Fieldvalue,options: $root.optionslist, optionsValue: 'Id', optionsText: 'Name'"></select>
///something
</tbody>
Ответ №1:
Вот пример, в котором я устанавливаю начальные значения, а затем загружается DOM и привязываются значения. Он работает так, как и ожидалось. Возможно, ваша проблема кроется в какой-то другой части кода, которую вы нам не показали.
var viewmodel = function(){
this.Model = {
Items: [
{Fieldvalue: ko.observable(2)},
{Fieldvalue: ko.observable(3)}
]
};
this.optionslist = [
{Id: 1, Name: 'option 1'},
{Id: 2, Name: 'option 2'},
{Id: 3, Name: 'option 3'}
];
};
ko.applyBindings(new viewmodel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="foreach: Model.Items">
<select data-bind="value: Fieldvalue,
options: $root.optionslist,
optionsValue: 'Id',
optionsText: 'Name'"></select>
</div>
Комментарии:
1. Я использовал тот же код, который я опубликовал выше, с набором моделей так же, как вы установили свой, и тогда это сработало, но поскольку я заполняю его из модели, которую я получил через AJAX-вызов, моя модель была назначена с помощью ko.viewmodel.fromModel , и, вероятно, проблема заключается в этой строке