2012年2月7日火曜日

Play Framework 2.0を学ぶ:その1 template engine

このあたりを見ながら個人的に重要そうな部分を抜粋。
https://github.com/playframework/Play20/wiki/ScalaTemplates

Play Scalaテンプレート

Play Scalaテンプレートは標準のScalaのfunction(以降、関数)にコンパイルされます。
下記のようなconvention(規約)に基づきます。

views/Application/index.scala.html

というテンプレートファイルを作ると
views.html.Application.index<
という関数を生成します。
上記ファイルの内容が以下のようだとすると

@(customer: Customer, orders: Seq[Order])
 

Welcome @customer.name!

    @orders.map { order =>
  • @order.title
  • }

これはどのScalaコードからでも、下記のように呼び出せます。
val html = views.html.Application.index(customer, orders)

なお、テンプレートファイルの1行目に記載してあるものは、Scala関数の引数とのこと。テンプレートを呼び出す際にも、関数を呼び出すのと同じように、引数に値を渡すんですねー。


"@"キャラクタ

テンプレート上の@は、Scalaコードの始まりと見なされます。
明示的に終了を記述する必要はありません。

ただし、マルチトークン(?)なScalaコードを記述したい場合は、
@(Scalaコード1 + Scalaコード2)のようにかっこでくくる必要があります。

また、{}を使って、複数のステートメントを書くこともできます。

@は特別なキャラクタなので、エスケープする場合は、

@@

と@を重ねる形でエスケープします。


テンプレートパラメータ
テンプレートは単純な関数であるため、パラメータが必要です。
パラメータは、テンプレートファイルの1行目に記述される必要があります。

デフォルト値も使えます。
パラメータグループも使えます。
インプリシットパラメータも使えます。


※その他は今のところ使わなさそうなので省略