У меня есть приложение, которое позволяет пользователям делать курсы с несколькими областями курса. Область курса выбирается из выпадающего списка выбора. Список привязан к данным с помощью нокаута.Нокаут Выбранный вариант по текстовому значению
HTML
<select id="courseAreaType" name="selectCourseArea" class="form-control" data-bind="options:$parent.courseAreaTypes, optionsText: 'name', optionsValue:'id', optionsAfterRender:$parent.setIconPath, value:typeid"></select>
Что мне нужно сделать, когда курс будет загружен, загрузить различную область курса, которые я сделал. Для каждой области курса необходимо загрузить свои значения в различные элементы управления.
Я смог загрузить снимок выбора со списком значений из БД и разрешить, когда пользователь выбирает параметр и сохраняет область курса, он успешно сохраняет имя курса.
Теперь то, что мне нужно сделать, это когда каждая область курс снова загружен, он выбирает опцию из выпадающего списка, основанного на courseArea.Name
Нокаутvar CourseViewModel = function (courseIn) {
var self = this;
if (courseIn === undefined) {
courseIn = {};
}
self.id = courseIn.Id;
self.name = ko.observable(courseIn.Name);
self.postalCode = ko.observable(courseIn.PostalCode);
self.city = ko.observable(courseIn.City);
self.province = ko.observable(courseIn.Province);
self.courseId = ko.observable(courseIn.CourseId);
self.courseAreas = ko.observableArray();
self.courseAreaTypes = ko.observableArray();
$.each(courseIn.CourseAreas, function(index, courseArea) {
self.courseAreas.push(new CourseAreaViewModel(courseArea));
});
$.getJSON("/Course/GetCourseAreaTypes", function (types) {
$.each(types, function (index, type) {
self.courseAreaTypes.push(new CourseAreaTypeViewModel(type));
});
});
$.each(courseIn.CourseAreas, function (index, courseArea) {
console.log(courseArea.Name);
var list = $('#courseAreaType');
var options = $('option', list); // This is where my problem is
});
self.setIconPath = function (option, courseAreaType) {
$(option).data("icon", courseAreaType.iconPath)
//console.log($(option).data("icon"));
}
}
var CourseAreaTypeViewModel = function (courseAreaTypeIn) {
var self = this;
if (courseAreaTypeIn === undefined) {
courseAreaTypeIn = {};
}
self.id = courseAreaTypeIn.ID;
self.name = courseAreaTypeIn.Name;
self.iconPath = courseAreaTypeIn.iconPath;
}
var CourseAreaViewModel = function(courseAreaIn) {
var self = this;
if (courseAreaIn === undefined) {
courseAreaIn = {};
}
self.id = courseAreaIn.Id;
self.name = ko.observable(courseAreaIn.Name);
self.acreage = ko.observable(courseAreaIn.Acreage);
self.goals = ko.observable(courseAreaIn.Goals);
self.typeid = ko.observable(courseAreaIn.TypeID);
self.selectedOption = ko.observable();
}
Я пытался изменить его основанный на получении идентификатора элемента, я пробовал .val, .prop, .attr без каких-либо успехов. Когда я записываю данные в консоль элемента, он не показывает значения в раскрывающемся списке, поэтому у меня есть ощущение, что нокаут добавляет значения на уровне скрипта, а jquery не может видеть эти значения.
это выглядело, как ваш JS не хватает закрывающей скобки, в свою очередь, сделал его похожим CourseAreaTypeViewModel и CourseAreaViewModel были определены в CourseViewModel ... Я предполагаю, что вы не имели в виду это, поэтому я прибрал ваше форматирование - как это выглядит? – sifriday
Вы будете правы. благодаря –