knockout.js数据绑定到下拉列表会覆盖原始值

时间:2012-06-05 14:02:26

标签: data-binding knockout.js observable

我有一个函数将一个对象放入一个名为“detailedStudent”的observable中,该函数将以模态显示学生的某些字段。这是问题所在:

  1. 我从一个值为false的字段开始。 (IncludeInStudentSiteResults)
  2. 我在'detailedStudent'中设置'student'对象,显示下拉列表(模拟模态弹出窗口)。
  3. 字段的值设置为true,这是下拉列表中的第一个选项。
  4. 这是一个重现问题的jsFiddle:http://jsfiddle.net/62fDB/16/

3 个答案:

答案 0 :(得分:1)

下拉选项值是字符串(不是布尔值)。 像这样更新数据初始化

...
"IncludeInStudentSiteResults": "false",
...

的jsfiddle:http://jsfiddle.net/62fDB/22/

或使用以下帖子Knockoutjs (version 2.1.0): bind boolean value to select box

中的解决方案

答案 1 :(得分:0)

这是您的版本:

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

JSfiddle:http://jsfiddle.net/62fDB/23/

答案 2 :(得分:0)

这是一个包含我问题答案的小提琴。我不喜欢我必须编写自定义绑定,但替代方法是使用枚举而不是数据绑定到布尔值。

http://jsfiddle.net/ekyDh/2/