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

Rom*_*las 22 scala playframework-2.0

在玩!1,可以使用以下代码获取循环内的当前索引:

#{list items:myItems, as: 'item'}
    <li>Item ${item_index} is ${item}</li>
#{/list}
Run Code Online (Sandbox Code Playgroud)

在Play2中是否有相同的功能?

@for(item <- myItems) {
    <li>Item ??? is @item</li>
}
Run Code Online (Sandbox Code Playgroud)

同样的问题_isLast_isFirst.

ps:这个问题非常相似,但解决方案暗示修改代码返回一个Tuple (item, index)而不仅仅是一个列表item.

bie*_*ior 55

是的,zipWithIndex内置的功能,好在有使用它更优雅的方式:

@for((item, index) <- myItems.zipWithIndex) {
    <li>Item @index is @item</li>
}
Run Code Online (Sandbox Code Playgroud)

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

<li>Item @{index+1} is @item</li>
Run Code Online (Sandbox Code Playgroud)

PS:在回答你的其他问题-不,有没有隐含的indexes,_isFirst,_isLast性质,反正你可以写简单的斯卡拉条件的循环中,立足压缩的指数值(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>
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*mon 8

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

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