2012-10-30 64 views
2

我想與搜索到的數據來更新我的數據綁定UL-李列表中的內容。我使用下面的視圖模型ko.applyBinding使用Knockout刷新搜索結果?

function PatientsModel(data) 
{ 
    var self = this; 

    self.Patients = ko.observableArray([]); 

    self.Patients(data.Patients); 

    self.addPatient = function (model, event) 
    { 
     alert("Patients to Add: " + model.LastName + ',' + model.FirstName); 
     //Replace with AJAX Calls : self.people.push({ name: "New at " + new Date() }); 
    }; 

    self.removePatient = function (model, event) 
    { 
     alert("Patients to Delete:" + model.LastName + ',' + model.FirstName); 
     //Replace with AJAX calls : self.people.remove(this); 
    } 

    self.RefreshData = function (data) 
    { 
     self.Patients = ko.observableArray([]); 
     self.Patients(data.Patients); 
    } 
} 

刷新我已經創建RefreshData內容,方法是將更新患者這是數據綁定「的foreach:患者」符合UL

我做以下綁定:

AllPatientList.PatientsModel = null; 
          AllPatientList.PatientsModel = new PatientsModel(data); 
          ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]); 

,並按照與更新視圖模型的內容:

if (AllPatientList.PatientsModel != null && AllPatientList.PatientsModel != undefined) 
          { 
           AllPatientList.PatientsModel.RefreshData(data); 
          } 
          else 
          { 
           AllPatientList.PatientsModel = new PatientsModel(data); 
           ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]); 
         } 

但它不起作用,UL的內容是不變

而且我嘗試做以下:

ko.cleanNode($('#AllPatientDiv>div>ul')[0]); 
AllPatientList.PatientsModel = new PatientsModel(data); 
           ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]); 

它是生產與重複/重複dataEntries名單。它顯示9個列表項目而不是3個(每個重複3次)。

我無法弄清楚什麼是錯了,我在這裏做。 ko.cleanNode()也不會從列表中刪除內容。請幫助,我如何使用更新的內容重新綁定UL-LI列表。

回答

2

他們並沒有改變,因爲你的RefreshData功能更是打破了綁定。當你第一次叫applyBindings()創建訂閱的Patients陣列。當你撥打RefreshData你是覆蓋一個新的陣列。這個新陣列沒有綁定訂閱。

如果你想清除舊的陣列,添加新數據之前使用removeAll。這將保持綁定訂閱不變。

編輯:

這裏是一個very simple fiddle展示這種

+0

#2抱着我選擇答案:) – Sumeet

+0

我不認爲這句話有道理... – Tyrsius

+0

這是怎麼回事,因爲你的迴應工作馬上,我試圖選擇它作爲答案。但是,在提交問題之後有一個特定的時間段,只有在我可以選擇一個響應作爲ANswer之後。謝謝Tyrsius – Sumeet