Javascript knockoutjs foreach数组选择项值绑定

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控件,它通过knockoutjs获取数据:

<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();
               });