Data binding 绑定到下拉列表的knockout.js数据将覆盖原始值
我有一个函数,它将一个对象放入一个名为“detailedStudent”的可观察对象中,该对象将在模式中显示学生的一些字段。问题是:Data binding 绑定到下拉列表的knockout.js数据将覆盖原始值,data-binding,knockout.js,observable,Data Binding,Knockout.js,Observable,我有一个函数,它将一个对象放入一个名为“detailedStudent”的可观察对象中,该对象将在模式中显示学生的一些字段。问题是: 我从一个值为false的字段开始。(包括学生现场结果) 我在显示下拉列表的“detailedStudent”中设置了“student”对象(模拟模式弹出窗口) 该字段的值设置为true,这是下拉列表中的第一个选项 下面是一个重现问题的JSFIDLE:这是您的版本: function StudentViewModel() { var self = this;
function StudentViewModel() {
var self = this;
this.students = ko.observableArray([]);
this.detailedStudent = ko.observable();
this.clickMe = function(student) {
alert(student.IncludeInStudentSiteResults());
self.detailedStudent(student);
alert(student.IncludeInStudentSiteResults());
}
}
尝试使用我的版本:
function StudentViewModel() {
var self = this;
this.students = ko.observableArray([]);
this.detailedStudent = ko.observable();
this.clickMe = function(student) {
alert(student.IncludeInStudentSiteResults());
self.detailedStudent(ko.observable(student));
alert(student.IncludeInStudentSiteResults());
}
}
jsIDLE:下拉选项值是字符串(不是布尔值)。 像这样更新数据初始化
...
"IncludeInStudentSiteResults": "false",
...
JSfiddle:
或者使用下面帖子中的解决方案这里有一把小提琴,里面有我问题的答案。我不喜欢必须编写自定义绑定,但另一种方法是使用枚举,而不是将数据绑定到布尔值
您的版本存在的问题是,detailedStudent从未绑定,因此下拉列表从未出现在页面上。使用您更新的修复程序,我发现一个非常常见的控制台JavaScript错误:无法解析绑定。消息:ReferenceError:IncludeInStudentSiteResults未定义;Bindings value:value:includeInstudentSiteResults这当然很有帮助,而且是朝着正确方向迈出的一步,但是布尔值正在自动序列化为JSON作为布尔值。是否有一种首选的方式将布尔值作为下拉选项值?这可能会有所帮助