Scala 播放框架模板:如何在表中开始新行?

Scala 播放框架模板:如何在表中开始新行?,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,我有一个对象列表,我想使用Play Framework模板进行渲染 @(cats: List[Category]) @category(cat: Category) = { <td><button class="btn btn-info">@cat.name</button></td> } <div class="modal-body"> <table class="table"> <

我有一个对象列表,我想使用Play Framework模板进行渲染

@(cats: List[Category])

@category(cat: Category) = {
    <td><button class="btn btn-info">@cat.name</button></td>
}

<div class="modal-body">
    <table class="table">
        <tbody>
            @cats.map { case cat =>
                @category(cat)
            }
        </tbody>
    </table>
</div>
我想我可以用索引列表压缩我的列表,并将每三个元素设置为一个新行。但我不知道怎么做

想法


谢谢。

您可以使用
分组
对列表进行分组,它将返回列表列表:

scala> List(1,2,3,4,5,6).grouped(3).toList
res13: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6))
在您的情况下,应该是这样的:

@(cats: List[String])

@category(groupedCats: List[String]) = {
    @groupedCats.map { cat =>
        <td><button class="btn btn-info">@cat</button></td>
    }
}

<div class="modal-body">
  <table class="table">
    <tbody>
      @cats.grouped(3).toList.map { grouped =>
        <tr>@category(grouped)</tr>
      }
    </tbody>
  </table>
</div>
@(猫:列表[字符串])
@类别(groupedCats:List[字符串])={
@groupedCats.map{cat=>
@猫
}
}
@cats.grouped(3).toList.map{grouped=>
@类别(分组)
}
通过这种方式,您可以向
@category
传递一个包含3个元素的列表,该列表被包装在
td
标记中。

当然,您可以而且不需要对其进行分组,请改为使用模块比较:

<table>
  <tr>
    @for((cat, index) <- cats.zipWithIndex) {
        <td>@cat</td>
        @if((index+1) % 3 == 0){</tr><tr>}  @* Close old row if has 3 elements and open new *@
    }
  </tr>
</table>

@用于((目录,索引)
<table>
  <tr>
    @for((cat, index) <- cats.zipWithIndex) {
        <td>@cat</td>
        @if((index+1) % 3 == 0){</tr><tr>}  @* Close old row if has 3 elements and open new *@
    }
  </tr>
</table>