关于Play 2.0模板引擎的文档不多。
如何使用Scala模板创建标记?
答案 0 :(得分:21)
play 2.0中的模板引擎直接来自play 1.0 scala模块。如果您仍然想知道Scala等功能语言带来什么好处,那么这肯定是它闪耀的领域之一。
演示:
在scala语法中,标记只不过是函数调用。有趣的是,html片段本身被视为函数,允许最强大的替换构造。
让我们定义一个名为 mytag.scala.html
的html页面的文件:应用/视图/ mytags / mytag.scala.html
@(level:String = "error", index: Int)(body: (String) => Html)
@level match {
case "success" => {
<p class="success" index="@index">
@body("green")
</p>
}
case "warning" => {
<p class="warning" index="@index">
@body("orange")
</p>
}
case "error" => {
<p class="error" index="@index">
@body("red")
</p>
}
}
上面的标签在2个不同的参数组中采用3个参数:
现在让我们看看我们如何使用这个标签:
@import views.mytags._
@mytag("error",2) { color =>
Oops, something is <span style="color:@color">wrong</span>
}
在我们使用标签(或功能)之前,我们需要让Play知道它的位置:这是 import 语句的目的。请注意,只要您调整导入位置,标记文件的位置(路径)就无关紧要,就像使用Java包一样。
跟随呼叫本身,这是一种直截了当的。但请注意,我们将参数化的html片段传递给标记。
有关详细信息,您可以在此URL
找到scala模板文档Play 2.0最终将附带自己的文档。
答案 1 :(得分:5)
完全不必要的答案,但只是训练我的scala。 在保持清醒的同时,这不会起作用吗?
@(level:String = "error", index: Int)(body: (String) => Html)
<p class="@level" index="@index">
@body(
@level match {
case "success" => "green"
case "warning" => "orange"
case "error" => "red"
}
)
</p>
答案 2 :(得分:0)
使用@import mytags ._
完整示例(http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):
Let’s write a simple views/tags/notice.scala.html tag that displays an HTML notice: @(level: String = "error")(body: (String) => Html) @level match { case "success" => { <p class="success"> @body("green") </p> } case "warning" => { <p class="warning"> @body("orange") </p> } case "error" => { <p class="error"> @body("red") </p> } }
现在让我们从另一个模板中使用它:
@import tags._
@notice(“error”){color =&gt;哎呀,有些事情是错的}