2012-06-12 54 views
22

我在knockout.js中有一个嵌套的foreach循环,我想从内部循环内的外部循环中的当前对象访问一个属性。我将如何做到这一点?knockout.js嵌套的foreach访问外部循环属性

<!-- ko foreach: graduationDateRows -->     
    <tr> 
    <td class="center" data-bind="text: CalendarYear"></td> 
    <!-- ko foreach: $root.graduationDatesHeaders --> 
    <td class="center" data-bind="text: /* !here! */"></td> 
    <td></td> 
    <!-- /ko -->                 
    </tr> 
<!-- /ko --> 

回答

25

您可以使用$parent来访问一个范围级别。所以,从你的内循环,您可以使用parent访问当前项目正在环绕在你的graduationDateRows

+0

但你不能用'$父$ index',它似乎。 –

+12

但是,您可以使用'$ parentContext'。 –

7

要在外环从当前对象在内部循环,您可以使用$parent.property_name访问属性。

例如为:salesInfo阵列的

<ul id="salesInfo" data-bind="foreach : salesInfo "> 
    <li class="department"> 
     <a href="#" data-bind="text: name" /> 
     <ul id="salesDept" data-bind="foreach: years"> 
      <li class="years"> 
       <a href="#" data-bind="text: year, click:function(data, event) { $root.yearClicked(year,$parent.name,data) }" /> 
      </li> 
     </ul> 
    </li> 
</ul> 

样品对象:

{ 
    "id" : "0", 
    "name" : "Human Resources", 
    "years" : [ 
     { "year" : "2012", "values" : [250000,350000,150000,220000,450000,180000] } 
    ] 
} 
13

可以甚至通过循环使用$parentas混叠完全无关阵列foreach结合。

考虑the following example

var VM = function(){ 
    this.rows = ['one','two','three']; 
    this.cols = [1,2,3,4,5]; 
} 
ko.applyBindings(new VM()); 
<table border="1"> 
    <tr> 
     <th></th> 
     <!-- ko foreach: cols --> 
     <th data-bind="text: $data"></th> 
     <!-- /ko --> 
    </tr> 
    <!-- ko foreach: {data: rows, as: 'row'} --> 
    <tr> 
     <th data-bind="text:row"></th> 
     <!-- ko foreach: {data: $parent.cols, as: 'col'} --> 
     <td data-bind="text:row + '/' + col"></td> 
     <!-- /ko --> 
    </tr> 
    <!-- /ko --> 
</table> 
+0

这比消除模糊性要好得多 – reckface