2017-02-22 7 views
0

3つのネストされたforeachを持っている場合、内側のforeachの内側の2番目の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

答えて

0

ここではjsfiddleデモと同様の質問を見つけることができます:あなたが好きなように Getting $index of grand parent in a nested loop

+0

ありがとうございました。これは私のために働いた。 $ parentContext。$ parentContext。$ index()を使うことができます。 – Lucifer

1

あなたは$parentContextな回数を上に移動することができます。だから、:>$parentContext.$parentContext.$index()>$parentContext.$index()$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の1つのステップのコンテキストを提供します。 – Lucifer

関連する問題