Getting the index of the current loop in Play! 2 Scala template

后端 未结 2 1974
轻奢々
轻奢々 2020-12-01 08:25

In Play! 1, it was possible to get the current index inside a loop, with the following code:

#{list items:myItems, as: \'item\'}
    
  • Item ${item_in
  • 相关标签:
    2条回答
    • 2020-12-01 08:42

      Yes, zipWithIndex is built-in feature fortunately there's more elegant way for using it:

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

      The index is 0-based, so if you want to start from 1 instead of 0 just add 1 to currently displayed index:

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

      PS: Answering to your other question - no, there's no implicit indexes, _isFirst, _isLast properties, anyway you can write simple Scala conditions inside the loop, basing on the values of the zipped index (Int) and size of the list (Int as well).

      @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>
      }
      
      0 讨论(0)
    • 2020-12-01 08:51

      The answer in the linked question is basically what you want to do. zipWithIndex converts your list (which is a Seq[T]) into a Seq[(T, Int)]:

      @list.zipWithIndex.foreach{case (item, index) =>
        <li>Item @index is @item</li>
      }
      
      0 讨论(0)
    提交回复
    热议问题