menu
書いてる野郎
orebike@gmail.com
views ディレクトリ以下に適当にディレクトリを作って(別に作らなくてもよい)そこに
hogehoge.scala.html
というファイル名で作る
そして先頭行にコメントを入れる
@* hogehoge *@
この @*
に挟まれた範囲がコメントになる。
特に必須では無いのだが Eclipse はこの先頭行のコメントを読んでいるらしく、この先頭行コメントがないと Scala Template ファイルとして認識してくれない。
パラメータ無しで単にHTMLのみを出力する場合は何も関係ない。普通にHTMLを書いていけばいい。
コントローラーからパラメータを受け取る場合は、このように冒頭で @
に続き変数宣言的なものを書く。
@(title:String, body:String) <html> <head> <title>@title</title> </head> <body> @body </body> </html>
コントローラからは Plya2-Scala/controller/イロイロな出力 で示しているように、このようにパラメータを渡す。 これは Scala の名前付き引数を使って対応が分かりやすいように記述している。
def myViewParams = Action { Ok(views.html.MyView.params(title = "aaaaaaaaaaaaaa", body = "bbbbbbbbbb")) }
引き込んだパラメータは @
に続きその変数名で出力される。
この Play の View では @
に続く記述は Scala コードとして解釈される。終わりがどこになるかは文脈から自動的に判定される。
この部分はほぼ Scala なのでかなり自由になんでも書けるので JSPの窮屈さから開放された感じがして嬉しいところだ。
通常は @
に続きパラメータ名を書けば後はエンジン側が自動判定してくれるのだが、何かに密着させて書きたい場合、
例えばhoge
というパラメータ名の後に即hoge
という文字列を突っ込みたい場合、このように括弧で明示する。
@(hoge)hoge
こっちの括弧でもOKのようだ。
@{hoge}hoge
@ につづいて書けばそれはすべて Scala なので、Scala の 制御構文 がほぼ全部そのまま使える
中身を主体にして外側の枠を選択する機能である
呼び出される主体はこのように作成する。 これを普通の Scala Template 同様にコントローラーから呼び出す。 最初に @ から書いているのは外枠であるレイアウトにあたる Scala Template である。
@views.html.common.myLayout(title = "piyopiyo") { <h1>hogehoge</h1> }
レイアウト部分はこのように書く。2個めの括弧内の body の変数は中身を表す。
@(title:String)(body: Html) <html> <head> <title>@title</title> </head> <body> @body </body> </html>
変数が、このようなブロックを引数に取っていると考える。
{ <h1>hogehoge</h1> }
コードがうまく Scala っぽく実現されていて気持ちが良い。
レイアウトのような枠ではなく、ヘッダーやフッター等の共通部分をもってくるような場合である
同一ディレクトリ階層にある Scala Template はその名前をズバリでもってこれる
header.scala.html
というファイルなら
@header("piyopiyo")
のように関数を実行するようにすると展開される。
ディレクトリ階層の違うものを持ってくるならば
@views.html.MyView.header("piyopiyo")
このように views.html
に続きディレクトリ階層をフルで書いて呼び出す