Play frameworkのviewで使うScala入門

シェアする

  • このエントリーをはてなブックマークに追加

このエントリはPlay frameworkひとりアドベントカレンダーの13日目です。

昨日からviewをいじってますが、Play framework 2ではviewとして Scala を使うのです。。。

というわけでtemplateとして使う範囲で便利なScala文法について覚えましょう。 これくらいならウエッってならないと思います。たぶん。

キホンのキ

@なんとか はScalaとして解釈されるようです。

変数呼び出し

@変数名 と書くと変数が出力されます。

<html>
    <head>
        <title>@title</title>
    </head>
    <body>
        @content
    </body>
</html>

オブジェクトのプロパティはそのまま 変数名.プロパティ名 で呼び出せます。

@(twowa :Twowa)
<li>@twowa.contents</li>

オブジェクトがMapの場合、 @変数名("キー名") で呼び出せます。

hoge.get("attr1") を呼び出す場合はこんな感じ。

@(hoge :HashMap[String,String])
<li>@hoge("attr1")</li>

型宣言

Scalaの型宣言は後ろに書きます! これだけ気をつけましょう。

@(title :String, message :String, amount :Long)

List, Mapの内包型

上でもちょっと登場しましたが、[クラス名] とか [クラス名, クラス名] とかそんなかんじ。

@(twowas :List[Twowa], myHashMap :HashMap[String, String], twowaRanks :HashMap[String,List[Twowa]])

Object型

Any です。

@(bucket :HashMap[String, Any])

ループ

foreach的な呼び出しが <- を使ってとてもきれいに書けます。

@(twowas :List[Twowa])
 
@for(twowa <- twowas){
<li>
  <a href="/twowa/@twowa.userId/@twowa.id">@twowa.contents</a>
</li>
}

ちなみに回数が決まってるループも n to N を使ってきれいに書けます。

@for(i <- 1 to 10){
  <div>@i</div>
}

分岐

if です。やっぱりね。

@if(twowa.id < 1000){
  <div>
    初期ユーザ特典!!!
  </div>
}

型変換(キャスト)

@definingAny#asInstanceOf を使います。

ややこしいですが丸暗記してください。

@defining(<Anyな変数>.asInstanceOf[<キャスト後の型>]){ 変数名 =>
  もろもろ
}
@(twowaMap :HashMap[String, Any])
 
@defining(twowaMap.get("selectedAt").asInstanceOf[Date]){ selectedAt =>
<div>selected at @selectedAt</div>
}
 
@defining(twowaMap.get("bestTwowa").asInstanceOf[Twowa]){ bestTwowa => 
<h1>Best Twowa</h1>
<div>@bestTwowa.contents by @bestTwowa.userId at @bestTwowa.createdAt</div>
}

テンプレート呼び出し

すでに @main でわかってると思いますが、 @ファイル名(引数) で呼び出せます。

例えば main.scala.html

@(title: String)(content: Html)

なので、使うときは

@main("title in string"){contents in html}

という形。簡単ですね。
やったねヽ(`▽´)/

ads

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

ads