2012-11-20 79 views
1

我想用knockout inbuild WITH Binding做简单的行为。有使用ko.applyBinding与ViewModel绑定的UL-LI列表。工作正常。 现在,我正在尝试使用列表实现选择项目行为。因此在ViewModel内部实现了selectPatient行为并使用Click将其与LI标签绑定。该方法被调用并设置observable selectedPatient变量。淘汰赛与绑定不起作用

现在有一个div在UL-LI相同级别的父级div中,我试图使用With与selectedPatient绑定。不工作。

代码以供参考:

<div data-role="content" id="MyPatientDiv"> 
     <div> 
      <ul data-bind="foreach:Patients"> 
          <li data-bind="click:$root.selectPatient"> 
           <table> 
            <tr> 
             <td> 
              <a href="javascript:" id="pName" sortorder="none"><span data-bind="text:LastName"></span> 
               ,<span data-bind="text:$data.FirstName"></span></a> 
             </td> 
             <td> 
              <a href="javascript:" id="pid" sortorder="none"><span data-bind="text:$data.DisplayId"> 
              </span></a> 
             </td> 
             <td> 
              <a href="javascript:" id="pLocation" sortorder="none"><span data-bind="text:$data.UnitName"> 
              </span></a> 
             </td> 
            </tr> 
           </table> 
          </li> 
      </ul> 
     </div> 
     <div id="dlgAction" databind="with:selectedPatient"> 
      What would you like to do for <span databind="text:$data.LastName"></span>,<span databind="text:$data.FirstName"></span> 
     </div> 
    </div>​ 

脚本代码:

function PatientsModel(data) { 
    var self = this; 

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

    if (data.patientEncounters == null) self.Patients([]); 
    else self.Patients(data); 

    self.selectedPatient = ko.observable(null); 

    self.selectPatient = function(data, target) { 
     self.selectedPatient(data); 

     //$('#dlgAction').dialog('open'); 
    }; 
} 

MyPatientList = { 
    PatientsModel: null, 
    DOMElementId: 'MyPatientDiv' 
} 

$(function(){ 
    var data = [{ 
     AccountId: null, 
     AdmissionStatus: 1 
     AttendingPhysicians: null, 
     BedId: null, 
     DisplayId: "32456", 
     EncounterKey: "00000000000000000000000000000003", 
     FirstName: "John", 
     Gender: null, 
     LastName: "Rambo", 
     LocalPatient: true, 
     MiddleName: null, 
     MyPatient: true, 
     PatientId: null, 
     PatientKey: "00000000000000000000000000000003", 
     RoomName: null, 
     SameName: false, 
     TemporaryPatient: false, 
     UnitName: "IC1", 
     VisitId: null}]; 

     data[0].LastName; 

    MyPatientList.PatientsModel = new PatientsModel(data); 
    ko.applyBindings(MyPatientList.PatientsModel, $('#MyPatientDiv')[0]); 
}); 

难道我做错了什么?

问候 Sumeet

回答

2

你错过了破折号data-bind关键字:

<div id="dlgAction" data-bind="with:selectedPatient"> 
    What would you like to do for <span data-bind="text:$data.LastName"></span>, 
    <span data-bind="text:$data.FirstName"></span> 
</div> 

你也不必把$数据为data-bind属性,你可以只指定属性名称:

<div id="dlgAction" data-bind="with:selectedPatient"> 
    What would you like to do for <span data-bind="text: LastName"></span>, 
    <span data-bind="text: FirstName"></span> 
</div> 

编辑:它适用于我。这里是一个小提琴:http://jsfiddle.net/vyshniakov/BjeP9/

数据有错误 - 您在AdmissionStatus属性后错过了昏迷。您还尝试加载始终为空的data.patientEncounters,因此您的收藏未初始化。

+0

我发现它是一个错字,而复制代码( - 符号)。而且它仍然不适合我:( – Sumeet

+0

你可以发布你的代码在一个小提琴吗? –

+0

我添加了这个,仍然发现它是空的 – Sumeet