2012-06-12 5 views
22

Ho un ciclo foreach nidificato in knockout.js e voglio accedere a una proprietà dall'oggetto corrente nel ciclo esterno all'interno del ciclo interno. Come lo farei?knockout.js nested foreach accesso proprietà loop esterno

<!-- 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 --> 

risposta

25

È possibile utilizzare $parent per accedere a un livello dell'ambito verso l'alto. Quindi, dal ciclo interno è possibile utilizzare parent per accedere alla voce corrente che è in loop nella vostra graduationDateRows

+0

Ma non si può usare '$ genitore $ index', a quanto pare. –

+12

Tuttavia, è possibile utilizzare '$ parentContext'. –

7

Per accedere a una proprietà nel ciclo esterno dall'oggetto corrente nel ciclo interno è possibile utilizzare $parent.property_name.

Es .:

<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> 

oggetto Campione di salesInfo matrice:

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

Si può anche scorrere array completamente indipendenti utilizzando $parent e as aliasing in foreach vincolante.

consideri 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

Questo è molto meglio in quanto elimina l'ambiguità – reckface