Вопрос по nested-loops, knockout.js, foreach – knockout.js свойство внешнего цикла для вложенного доступа foreach

22

У меня есть вложенный цикл foreach в knockout.js, и я хочу получить доступ к свойству текущего объекта во внешнем цикле внутри внутреннего цикла. Как бы я это сделал?

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

Ваш Ответ

3   ответа
25

Ты можешь использовать$parent чтобы получить доступ на один уровень выше. Итак, из вашего внутреннего цикла вы можете использоватьparent чтобы получить доступ к текущему элементу в вашем циклеgraduationDateRows

Тем не менее, вы можете использовать$parentContext.
Но вы не можете использовать$parent.$index, похоже на то.
15

Вы даже можете перебратьcompletely unrelated arrays с помощью$parent а такжеas алиасинг вforeach связывание.

Рассматриватьследующий пример:

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>  
Это намного лучше, так как устраняет двусмысленность
7

Чтобы получить доступ к свойству во внешнем цикле из текущего объекта во внутреннем цикле, вы можете использовать$parent.property_name.

Например.:

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

Образец объектаsalesInfo массив:

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

Похожие вопросы