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:这个问题非常相似,但解决方案暗示修改代码以返回 aTuple (item, index)而不仅仅是item.

4

2 回答 2

59

是的,幸运的zipWithIndex内置功能有更优雅的使用方式:

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

索引是从 0 开始的,所以如果你想从 1 而不是 0 开始,只需将 1 添加到当前显示的索引:

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

PS:回答你的另一个问题 - 不,没有隐含的indexes, _isFirst,_isLast属性,无论如何你可以在循环内编写简单的 Scala 条件,基于压缩索引(Int)和size列表(Int以及)的值。

@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将您的列表(即 a Seq[T])转换为 a Seq[(T, Int)]

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