Play2.0でmoreStylesとmoreScriptsの書き方をいろいろ考えてたら、テンプレートの使い方がいろいろわかってきた
id:kiris60 さんの別解的な書き方があるので一応紹介。
でも書くなら kirisさん方式が個人的には一番好きだな。
http://kiris.hatenablog.com/entry/2012/01/26/172446
参考
https://github.com/playframework/Play20/wiki/ScalaTemplates
http://playscalaja.appspot.com/documentation/0.9.1/templates Play1+Scalaとあまり変わってない
気づき点(仕様?)
- {}の仕様
テンプレートからテンプレートに引数を渡すときに、
中括弧({})で囲むと暗黙的に"play.api.templates.Html"に変換されるっぽい。
"@"をつけてScalaの処理を加えて、明示的に変数化してもplay.api.templates.Htmlになります。
@main("ここは任意の型が使えるが、"){
<!-- ここはplay.api.templates.Html型になる -->
}
- 1系と同様にテンプレートでもエラーがあれば警告してくれます
こんなかんじ(例1 )
- main.scala.html
@(title: String)(content: Html)(moreStyles: Html)(moreScripts: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
@moreStyles
<script src="/assets/javascripts/jquery-1.7.1.min.js" type="text/javascript"></script>
@moreScripts
</head>
...
- index.scala.html
@(message: String)
@import tags._
@main("Welcome to Play 2.0") {
@play20.welcome(message)
}{
@styleSheets(
List(
("screen", "stylesheets/main.css")
)
)
}{
@javaScripts(
List(
"javascripts/underscore.js",
"javascripts/underscore.string.js"
)
)
}
こんな書き方も可能
カリー化っぽく書くこともできます。
- main.scala.html
@(title: String)(moreStyles: Seq[(String, String)]=Nil)(moreScripts: Seq[String]=Nil)(content: Html)
@import tags._
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
@styleSheets(moreStyles)
<script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
@javaScripts(moreScripts)
</head>
<body>
@content
</body>
</html>
- index.scala.html
@(message: String)
@import tags._
@main("Welcome to Play 2.0")()(
List(
"javascripts/underscore.js",
"javascripts/underscore.string.js"
)
){
@play20.welcome(message)
}
