2012-06-05 61 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/