2012-10-03 90 views
2

我需要帮助使用knockout foreach绑定嵌套数组。使用Knockout foreach绑定嵌套数组

下面是代码,想知道如何获取PatAppointments数组中的元素。

<script language="javascript" type="text/javascript"> 
ko.applyBindings({ 
    "appointment": [{ 
     "Date": "01\/10\/2012", 
     "PatAppointments": [{ 
      "EndTime": "11:15:00", 
      "EventId": null, 
      "Facility": "General Physician", 
      "PatientID": 23, 
      "PatientName": "Vicki" 
     }], 
     "PatAppointments": [{ 
      "EndTime": "11:15:00", 
      "EventId": null, 
      "Facility": "General Physician", 
      "PatientID": 23, 
      "PatientName": "Scott" 
     }] 
    }] 
}); 

</script> 

<table> 
<tbody data-bind="foreach: appointment"> 
<tr> 
    <td data-bind="text: Date"> 
    </td> 
</tr> 
<tr> 
    <td> 
     @* 
     <tbody data-bind="foreach: appointment.PatAppointments"> 
     <tr> 
      <td data-bind="text: PatAppointments.PatientName"> 
      </td> 
      <td data-bind="text: PatAppointments.Facility"> 
      </td> 
     </tr> 
     </tbody> 
     *@ 
    </td> 
</tr> 
</tbody> 
</table> 

回答

2

正如您已经嵌套在另一个一个阵列时,需要在2嵌套html元素(DIV,UL,TR,...)等在下面的例子中,以限定2个的foreach绑定:

<div data-bind="foreach: appointment"> 
    <div data-bind="foreach: PatAppointments"> 
     <span data-bind="text: PatientName"></span> 
    </div> 
</div> 
4

正如你现在设置它,没有foreach会工作。要正确设置你的PatAppointments,你的对象应该像

"appointment": [{ 
    "Date": "01\/10\/2012", 
    "PatAppointments": [ 
    { 
     "EndTime": "11:15:00", 
     "EventId": null, 
     "Facility": "General Physician", 
     "PatientID": 23, 
     "PatientName": "Vicki" 
    }, 
    { 
     "EndTime": "11:15:00", 
     "EventId": null, 
     "Facility": "General Physician", 
     "PatientID": 23, 
     "PatientName": "Scott" 
    }] 
}] 

然后为GBS曾表示,你会想要一个foreach内的另一foreach结合绑定,例如:

<div data-bind="foreach: appointment"> 
    <div data-bind="foreach: PatAppointments"> 
     //Everything you want displayed from each PatAppointment here. 
    </div> 
</div> 

为小见fiddle例。

3

我正在使用嵌套数组,它很难/无用地创建仅用于绑定foreach语法的元素。我喜欢“无容器控制流语法”,看起来像这样:

<!-- ko foreach: appointment --> 
    <!-- ko foreach: PatAppointments --> 
     <span data-bind="text: PatientName"></span> 
    <!-- /ko --> 
<!-- /ko --> 

看到它的文档,在“笔记4” http://knockoutjs.com/documentation/foreach-binding.html