Play2 Scalaテンプレートでローカルに使用される変数をどのように宣言し、初期化しますか?
私はこれを持っています:
@var title : String = "Home"
テンプレートの先頭で宣言されていますが、このエラーが発生します:
illegal start of simple expression """),_display_(Seq[Any](/*3.2*/var)),format.raw/*3.5*/(""" title : String = "Home"
@defining("foo") { title=>
<div>@title</div>
...
}
基本的には、使用するブロックをラップする必要があります
実際、@ c4kのソリューションは、後で変数の値を変更しようとしない限り機能しています(非常に便利です)。
これをテンプレートの一番上に配置するだけです:
@yourVariable = {yourValue}
または、より複雑な式の場合は、次のようにします。
@yourVariable = @{yourExpression}
そのようなリストのようなものを扱うことさえできます:
@(listFromController: List[MyObject])
@filteredList = @{listFromController.filter(_.color == "red")}
@for(myObject <- filteredList){ ... }
与えられた例では、これは
@title = {Home} //this should be at beginning of the template, right after passing in parameters
<h1> Using title @title </h1>
あなたが言ったコメントでは、それはHTMLタイプにタイプされます。ただし、これは、@title
再び、そうではありませんか?
scalaテンプレートはこれをサポートしています。テンプレートで変数を定義できます
@import Java.math.BigInteger; var i=1; var k=1
テンプレートの値を変更する場合
@{k=2}
例
@(title:String)(implicit session:play.api.mvc.Session)
@import Java.math.BigInteger; var i=1; var k=1
^
<div id='LContent_div@i'>
^
<div id='inner_div_@k'></div>
^
</div>
virtualeyesのソリューションは適切なものですが、他の可能性もあります。通常はデフォルト値を使用してビューのparamを宣言することができます。その場合、テンプレート全体で利用可能になり、 controller
:
@(title: String = "Home page")
<h1>Welcome on @title</h1>
コントローラ:
def index = Action{
Ok(views.html.index("Other title"))
}
Javaコントローラはテンプレートのデフォルト値を認識しないため、毎回追加する必要があります。
public static Result index(){
return ok(views.html.index.render("Some default value..."));
}
すべてのコンテンツを@definingでラップしたくない場合は、次のようにします。
@yourVariable = { yourValue }
@definingディレクティブはテンプレートでは実際には読み取り不可です...
きれいに見え、時々好まれる明らかな解決策が1つあります。テンプレートの周りにスコープを定義し、その中に変数を定義し、スコープが次のように必要なhtmlコードを生成するようにします。
@{
val title = "Home"
<h1>Welcome on {title}</h1>
}
これにはいくつかの欠点があります。
NodeSeq
としてHTMLを生成しています。@{
内のコードはランタイムとしてコンパイルされているようです。なぜなら、ページに対して生成されたScala ):生成されたコード:
...
Seq[Any](format.raw/*1.1*/("""<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Basic Twirl</title>
</head>
<body>
"""),_display_(/*9.10*/{
val title = "Home"
<h1>Welcome on {title}</h1>
}),format.raw/*15.10*/("""
"""),format.raw/*17.5*/("""</body>
</html>"""))
}
}
}
...
回転テンプレートでは、定義ブロックを使用することをお勧めします。
@random = @{
new Random().nextInt
}
<div id="@random"></div>
<div id="@random"></div>
複数回使用すると異なる値になります!
@defining(new Random().nextInt){ random =>
<div id="@random"></div>
<div id="@random"></div>
}
@isExcel= {@Boolean.valueOf(Java.lang.System.getProperty(SettingsProperties.isExcel))}