2017-02-22 55 views
0

如果我們有3個嵌套的foreach,如何獲得內部foreach內的第二個foreach的$ index? $ index給了我們最內部foreach的計數器,$ parentContext給了我們最外層的foreach的計數器。中間的foreach呢?

+0

父上下文應適用於這一點 - 你可以顯示它不是爲你工作的例子嗎? –

+0

除了打開應該爲你工作的'parent',考慮在foreach綁定中使用'as'來爲你的元素賦予一個別名,比如'foreach:{data:people,as:'person'}'。內部foreach的可以通過名稱引用父元素,使得一切都更清晰,可以在深度嵌套時閱讀。在[knockout foreach page](http://knockoutjs.com/documentation/foreach-binding.html)中有一個很好的例子。 – JNevill

回答

1

只要你喜歡你可以向上移動$parentContext多次。所以:$index()>$parentContext.$index()>$parentContext.$parentContext.$index() ...

下面的例子表明,

  1. 它的工作原理,並
  2. 它的醜陋而且容易出錯...

更好的解決方案是在實際項目中包含(計算)索引屬性。

ko.applyBindings({ 
 
    items: [{ 
 
     items: [{ 
 
      items: [1, 2, 3] 
 
     }, 
 
     { 
 
      items: [4, 5, 6] 
 
     } 
 
     ] 
 
    }, 
 
    { 
 
     items: [{ 
 
     items: [7, 8, 9], 
 
     }, { 
 
     items: [0, 1] 
 
     }] 
 
    } 
 
    ] 
 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<ul data-bind="foreach: items"> 
 
    <li> 
 
    <strong data-bind="text: $index()"></strong> 
 
    <ul data-bind="foreach: items"> 
 
     <li> 
 
     <strong data-bind="text: [ 
 
      $parentContext.$index(), 
 
      $index()].join('.')"></strong> 
 
     <ul data-bind="foreach: items"> 
 
      <li> 
 
      <strong data-bind="text: [ 
 
       $parentContext.$parentContext.$index(), 
 
       $parentContext.$index(), 
 
       $index()].join('.')"></strong> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

$ parentContext。$ parentContxt。$ index()爲我工作。非常感謝。我認爲$ parentContext給你最外面的foreach上下文是錯誤的。它給你一個外部foreach的背景。 – Lucifer