在Play中获取当前循环的索引! 2 Scala模板

时间:2013-01-30 16:02:59

标签: scala playframework-2.0

在游戏中! 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:this question非常相似,但解决方案暗示修改代码以返回Tuple (item, index)而不仅仅是item列表。

2 个答案:

答案 0 :(得分:54)

是的,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>
}

答案 1 :(得分:8)

链接问题的答案基本上就是你想要做的。 zipWithIndex会将您的列表(Seq[T])转换为Seq[(T, Int)]

@list.zipWithIndex.foreach{case (item, index) =>
  <li>Item @index is @item</li>
}