如何用Play 2.0定义标签?

时间:2011-10-27 10:07:32

标签: scala tags playframework playframework-2.0

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

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

3 个答案:

答案 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个参数:

  1. 一个级别,由一个字符串(默认为“error”)
  2. 表示
  3. 索引
  4. 最后一个名为body的函数,它接受一个字符串参数并返回HTML代码。请注意,body在其自己的参数组中定义。它等同于我们在j2ee中所知道的 jsp片段
  5. 现在让我们看看我们如何使用这个标签:

    @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;哎呀,有些事情是错的}