2012-06-05 36 views
2

我有一个函数将一个对象放入一个名为“detailedStudent”的可观察对象中,该对象将在模态中显示一些学生的字段。这里的问题:knockout.js数据绑定到下拉框将覆盖原始值

  1. 我开始与具有假值的字段。 (IncludeInStudentSiteResults)
  2. 我在显示下拉列表(模拟模态弹出窗口)的'detailedStudent'内设置'student'对象。
  3. 该字段的值被设置为true,这是下拉列表中的第一个选项。

下面是再现问题的jsfiddle:http://jsfiddle.net/62fDB/16/

回答

1

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

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

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

或从下面的帖子Knockoutjs (version 2.1.0): bind boolean value to select box

+0

这当然是有帮助的,并且朝着正确的方向迈出了一步,但布尔值会自动作为布尔值序列化为JSON。有布尔值作为下拉选项值的首选方法吗? –

+1

这可能有助于[Knockoutjs(版本2.1.0):绑定布尔值来选择框](http://stackoverflow.com/questions/10510683/knockoutjs-version-2-1-0-bind-boolean-value-to - 选择框) –

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/

+0

与您的版本的问题是,detailedStudent永远不会被束缚,从而下拉页面上永远不会出现。 –

+0

回答和jsfiddle更新,请现在尝试 –

+0

使用您的更新的修复程序,我得到一个很常见的控制台JavaScript错误:无法解析绑定。消息:ReferenceError:IncludeInStudentSiteResults未定义;绑定值:值:IncludeInStudentSiteResults –

0

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

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