Obteniendo el índice del ciclo actual en Play! 2 plantilla de Scala

¡En juego! 1, fue posible obtener el índice actual dentro de un bucle, con el siguiente código:

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

    ¿Hay un equivalente en Play2 para hacer algo como eso?

     @for(item <- myItems) { 
  • Item ??? is @item
  • }

    La misma pregunta para _isLast y _isFirst .

    ps: esta pregunta es bastante similar, pero la solución implicó modificar el código para devolver un Tuple (item, index) lugar de solo una lista de item .

    Sí, zipWithIndex es una característica incorporada, afortunadamente, hay una forma más elegante de usarlo:

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

    El índice está basado en 0, por lo que si desea comenzar desde 1 en lugar de 0 simplemente agregue 1 al índice mostrado actualmente:

     
  • Item @{index+1} is @item
  • PD: respondiendo a su otra pregunta – no, no hay indexes implícitos, _isFirst , _isLast , de todos modos puede escribir condiciones simples de Scala dentro del ciclo, basándose en los valores del índice comprimido ( Int ) y el size de la lista ( Int como bien).

     @for((item, index) <- myItems.zipWithIndex) { 
    Item @{index+1} is @item
    @if(index == 0) { First element } @if(index == myItems.size-1) { Last element } @if(index % 2 == 0) { ODD } else { EVEN }
    }

    La respuesta en la pregunta vinculada es básicamente lo que quieres hacer. zipWithIndex convierte su lista (que es una Seq[T] ) en una Seq[(T, Int)] :

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