Data binding 绑定到下拉列表的knockout.js数据将覆盖原始值

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;

我有一个函数,它将一个对象放入一个名为“detailedStudent”的可观察对象中,该对象将在模式中显示学生的一些字段。问题是:

  • 我从一个值为false的字段开始。(包括学生现场结果)
  • 我在显示下拉列表的“detailedStudent”中设置了“student”对象(模拟模式弹出窗口)
  • 该字段的值设置为true,这是下拉列表中的第一个选项
  • 下面是一个重现问题的JSFIDLE:

    这是您的版本:

    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作为布尔值。是否有一种首选的方式将布尔值作为下拉选项值?这可能会有所帮助