У меня небольшая проблема с установкой начального значения выпадающего списка. Код ниже - это определение модели представления и инициализация в $(document).ready
. У меня есть массив с именем sourceMaterialTypes
и selectedSourceMaterialType
, представляющий выбранное значение этого массива. Я инициализирую модель представления со значениями из (ASP.Net MVC) Model и ViewBag.
var viewModel = {
sourceMaterialTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.SourceMaterialTypes))),
selectedSourceMaterialType :
ko.observable(@Html.Raw(Json.Encode(Model.SourceMaterialType))),
ingredientTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.IngredientTypes))),
selectedIngredientType : ko.observable()
};
$(document).ready(function () {
ko.applyBindings(viewModel);
viewModel.selectedSourceMaterialType.subscribe(function(newSourceMaterialType) {
$.getJSON("/IngredientType/FindByMaterialType",
{ "id": newSourceMaterialType })
.success(function (data) {
viewModel.ingredientTypes($.parseJSON(data));
})
.error(function () { alert("error"); });
});
});
Ниже приведено определение моего раскрывающегося списка (списка) с определением привязки Knockout.
<select id="SourceMaterialTypeId"
name="SourceMaterialTypeId"
data-bind="options: sourceMaterialTypes,
optionsText: 'Name',
optionsValue : 'Id',
value: selectedSourceMaterialType"></select>
Все это работает отлично, за исключением первоначально выбранного значения в раскрывающемся списке исходных материалов (selectedSourceMaterialType
правильно привязано, поэтому, когда выбор раскрывающегося списка изменяет его значение, он правильно обновляется, это только исходный выбор, с которым я столкнулся), который всегда является первым элементом массива sourceMaterialTypes
в моей модели представления.
Я хотел бы, чтобы первоначально выбранное значение было таким, которое инициализируется из (серверной) модели в качестве значения свойства модели selectedSourceMaterialType
.