在playframework scala模板中声明并传递List

use*_*625 4 playframework-2.0

我有一个header.scala.html文件,需要一个字符串和一个列表参数

@(title: String)(scripts: List[String])

其他scala文件将引用标头并将传递特定列表,例如

@import scala._
@{val jsList = List("a", "b")}
@views.html.header("title"){jsList}
Run Code Online (Sandbox Code Playgroud)

但是我得到了Compliation错误 - 类型不匹配; 发现:需要play.api.templates.Html:java.util.List [String]

必须有一些我没有看到的语法问题......任何人?

谢谢.

Aer*_*rus 5

您无法在Play模板中声明变量(如此).(这是关于它的谷歌小组讨论)

您可以做的第一件事是,如果您只需要模板中的值一次:

@views.html.header("title")(List("a","b"))
Run Code Online (Sandbox Code Playgroud)

请注意,您应该使用(),我相信它们之间的所有内容都{}被解释为HTML代码(因此您的类型不匹配错误).

但是,如果您在模板中多次需要它,这不是一种合适的方法.然后你可以使用defining块:

@defining(List("a","b")) { jsList =>

  @* using it once *@
  @views.html.header("title")(jsList)

  @* using it twice *@
  <p>My list contains @jsList.size elements.</p>

  @* ... *@
}
Run Code Online (Sandbox Code Playgroud)