2012-08-16 76 views
0

使用顯示模塊模式時,我無法使數據綁定與Knockout一起工作。敲除和顯示模塊模式的數據綁定問題

我的JavaScript是這樣

var HMS = HMS || {}; 

$(function() { 

    HMS.PatientModel = function() { 
     this.Patient_Name = ko.observable(); 
     this.Patient_Address = ko.observable(); 
    }; 

    HMS.PatientViewModel = function() { 
     var patient = ko.observable(), 
     loadPatient = function() { 
      patient = new HMS.PatientModel(); 
      patient.Patient_Name("Premkumar"); 
     }; 
     return { 
      patient: patient, 
      loadPatient: loadPatient 
     }; 
    }(); 

    HMS.PatientViewModel.loadPatient(); 
    ko.applyBindings(HMS.PatientViewModel); 

}); 

我無法獲得數據綁定到與患者姓名正常工作。 HTML div標記有data-bind="text:patient.Patient_Name"

請參考jsFiddle中的代碼http://jsfiddle.net/stprem/pp9ym/1/。如果你能告訴我在數據綁定中我做錯了什麼,我將不勝感激。

回答

4

在您的loadPatient函數中,您將用新對象替換patient變量,但模塊已返回對原始可觀察對象的引用。因此,以這種方式更新它不會更新對象返回的內容。

這裏有一個選項:http://jsfiddle.net/rniemeyer/pp9ym/6/

基本上,你保持patient作爲觀察到的,然後在你的loadPatient功能更新。在您看來,使用with綁定可以幫助您防止您的對象爲空,以防您想在調用ko.applyBindings之後加載它。

+0

Tx很多幫助,它現在工作正常。我瞭解你的答案的第一部分,但對於HTML部分,我不是很清楚爲什麼我不能使用patient.Patient_Name設置文本。 – Premkumar 2012-08-16 12:22:40

+0

只要您的數據在應用綁定之前加載,您就可以使用。我只是想證明使用'with'綁定可以讓你綁定空的可觀察對象,然後填充它。只是一個選項,如果你正在從服務器加載你的數據(在應用綁定之後)。 – 2012-08-16 14:07:28