在嵌套循环中获取Grand parent的$ index

Suw*_*wer 14 nested-loops knockout.js

如何在嵌套循环中访问grand parent的索引?

例如:

<div class="loop" data-bind="foreach: rows">
    <div class="nested-loop" data-bind="foreach: cells">
        <div class ="nested-nested-loop" data-bind="foreach: candidates, css : {selected : $root.isSelected($parentContext.$parentContext.$index(), $parentContext.$index(), $index())}">
            Candidate index: <span data-bind="text: $index()"></span>
            Cell index: <span data-bind="text: $parentContext.$index()"></span>
            Row index: <span data-bind="text: $parentContext.$parentContext.$index()"></span>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我试着像这样绑定:

css : {selected : $root.isSelected($parentContext.$parentContext.$index(), $parentContext.$index(), $index())}
Run Code Online (Sandbox Code Playgroud)

我遇到了:

TypeError:$parentContext.$parentContext.$index不是函数

nem*_*esv 18

如果你想显示祖父的索引,你需要的$parentContext$parentContext,所以你需要写:

Row index: <span data-bind="text: $parentContext.$parentContext.$index()"></span>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/fjYsG/

它在您的css绑定中不起作用,因为您对相同的元素具有绑定,foreach因此绑定上下文未正确设置.

您可以通过移动foearchcss使用包含无包含绑定系统的不同元素来解决此问题:

<div class="loop" data-bind="foreach: rows">
    <div class="nested-loop" data-bind="foreach: cells">
        <!-- ko foreach: candidates -->
            <div class="nested-nested-loop" 
                data-bind="css : {selected : 
                    $root.isSelected($parentContext.$parentContext.$index(), 
                    $parentContext.$index(), $index())}">
              Candidate index: <span data-bind="text: $index()"></span>
              Cell index: <span data-bind="text: $parentContext.$index()"></span>
              Row index:  <span 
                 data-bind="text: $parentContext.$parentContext.$index()"></span>

           </div>
        <!-- /ko -->
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

演示JSFiddle.

  • 这是对的.`$ parents [1]`可以很好地获取祖父素$ data,但这是获取绑定上下文的方法. (3认同)