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) }