Проблема связана с this и this .
Проблема заключается в том, что когда список опций еще не заполнен действительными данными (потому что вызов JSON возвращаетасинхронно), вы не можете установить начальное выбранное значение.
function PersonViewModel() {
// Data members
this.Function_Id = ko.observable('@(Model.Function_Id)');
this.Functions = ko.observableArray([{ Id: '@(Model.Function_Id)', Name: ''}]); // This works
//this.Functions = ko.observableArray(); // This does not work
this.SubFunctions = ko.observableArray();
this.GetFunctions = function () {
var vm = this;
$.getJSON(
'@Url.Action("GetFunctions", "Function")',
function (data) {
vm.Functions(data);
if (vm.Function_Id() === undefined) {
//vm.Function_Id('@(Model.Function_Id)'); // Only way to solve my problem?
}
}
);
};
}
$(document).ready(function () {
var personViewModel = new PersonViewModel();
ko.applyBindings(personViewModel);
personViewModel.GetFunctions();
});
См. это измененное fiddle