Javascript knockoutjs foreach数组选择项值绑定
我有一个select控件,它通过knockoutjs获取数据:Javascript knockoutjs foreach数组选择项值绑定,javascript,knockout.js,knockout-2.0,Javascript,Knockout.js,Knockout 2.0,我有一个select控件,它通过knockoutjs获取数据: <select class="form-control" data-bind="value: $root.selectedItem, options: $root.TeacherOptions(), optionsValue: 'TeacherId', optionsText: 'TeacherName', optionsCaption: 'Choose Teacher'"></select> 我如何获得这
<select class="form-control" data-bind="value: $root.selectedItem, options: $root.TeacherOptions(), optionsValue: 'TeacherId', optionsText: 'TeacherName', optionsCaption: 'Choose Teacher'"></select>
我如何获得这些值:
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Teachers.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (i) {
if (i.d) {
return t._teacherOptions(i.d);
}
},
error: function (n) {
u(n);
}
});
}
getTeacherList();
t.TeacherOptions = ko.computed(function () {
return t._teacherOptions();
});
如果希望不同的选择能够具有不同的值,则需要为其
值
绑定提供不同的可观察值。看起来您是在foreach
中创建这些选择,因此在循环的每个元素中都有一个变量,而不是$root.selectedItem
,它只是一个变量
函数教师选项(名称、id){
返回{
教师姓名:姓名,
教师id:id
};
}
vm={
教师选项:ko.array([
教师选项(“一”,1),
教师选项(“2”,2),
教师选项('pi',3)
]),
选择器:[{
selectedItem:ko.observable()
}, {
selectedItem:ko.observable()
}]
};
ko.应用绑定(vm)代码>
之所以发生这种情况,是因为您有多个selects all绑定到$root.selectedItem
。您需要将每个选择绑定到不同的值。最简单的方法是在迭代对象上创建一个新的可观察对象。如果您提供更多的源代码,我可能会进一步提供帮助。@PeteG检查我如何使用更新代码中的值。我从服务器端代码获取教师,我只是包括如何获取值>@Laziale。无论您从何处获取教师,都无所谓。问题在于,您对每个select的值
绑定使用了相同的变量。当该变量的值更改时(因为您在其中选择了一个选项),绑定到该变量的所有选项都将更新。根据您建议的答案,您认为我应该在代码中做什么?我是否应该修改应用程序获取值的方式?你能根据我目前的功能给我举个例子吗?我认为您的绑定应该是value:selectedItem
而不是value:$root.selectedItem
。
t._teacherOptions = ko.observable();
function getTeacherList() {
$.ajax({
type: "POST",
url: "/webservices/Teachers.asmx/GetTeachers",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (i) {
if (i.d) {
return t._teacherOptions(i.d);
}
},
error: function (n) {
u(n);
}
});
}
getTeacherList();
t.TeacherOptions = ko.computed(function () {
return t._teacherOptions();
});