6

关于 Play 2.0 模板引擎的文档并不多。

如何使用 Scala 模板创建标签?

4

3 回答 3

21

play 2.0 中的模板引擎直接来自 play 1.0 scala 模块。如果您仍然想知道像 Scala 这样的函数式语言能给图片带来什么好处,那么这肯定是它的亮点之一。

示范:

在 Scala 语法中,标签只不过是一个函数调用。有趣的是,html 片段本身被视为函数,允许最强大的替换构造。

让我们定义一个名为mytag.scala.html的 html 页面

文件:apps/views/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 个参数:

  1. 一个级别,由一个字符串表示(默认为“error”)
  2. 一个索引
  3. 最后是一个名为 body 的函数,它接受一个字符串参数并返回 HTML 代码。请注意,body 是在其自己的参数组中定义的。它相当于我们在 j2ee 中所知道的jsp 片段

现在让我们看看如何使用这个标签:

@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 最终将带有自己的文档。

于 2011-10-27T10:08:03.050 回答
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>
于 2011-10-28T10:39:04.530 回答
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 => 糟糕,出了点问题}

于 2013-05-09T11:52:28.083 回答