23

劇中!1 では、次のコードを使用して、ループ内で現在のインデックスを取得することができました。

#{list items:myItems, as: 'item'}
    <li>Item ${item_index} is ${item}</li>
#{/list}

そのようなことをするために、Play2に同等のものはありますか?

@for(item <- myItems) {
    <li>Item ??? is @item</li>
}

_isLastとについても同じ質問です_isFirst

ps:この質問は非常に似ていますが、解決策はコードを変更してTuple (item, index)のリストではなくを返すことを暗示していますitem

4

2 に答える 2

59

はい、組み込みzipWithIndex機能です。幸いなことに、それを使用するためのよりエレガントな方法があります。

@for((item, index) <- myItems.zipWithIndex) {
    <li>Item @index is @item</li>
}

インデックスは 0 ベースなので、0 ではなく 1 から開始したい場合は、現在表示されているインデックスに 1 を追加します。

<li>Item @{index+1} is @item</li>

PS:他の質問への回答 - いいえ、暗黙のindexes, _isFirst,プロパティはありません。とにかく、圧縮されたインデックス ( ) とリスト (同様)_isLastの値に基づいて、ループ内に単純な Scala 条件を記述できます。IntsizeInt

@for((item, index) <- myItems.zipWithIndex) {
    <div style="margin-bottom:20px;">
        Item @{index+1} is @item <br>
             @if(index == 0) { First element }
             @if(index == myItems.size-1) { Last element }
             @if(index % 2 == 0) { ODD } else { EVEN }
    </div>
}
于 2013-01-30T21:12:16.003 に答える
8

リンクされた質問の答えは、基本的にあなたがやりたいことです。 zipWithIndexあなたのリスト(であるSeq[T])をに変換しますSeq[(T, Int)]

@list.zipWithIndex.foreach{case (item, index) =>
  <li>Item @index is @item</li>
}
于 2013-01-30T16:09:07.007 に答える