Play2 Scalaテンプレートでローカルに使用される変数をどのように宣言して初期化しますか?
私はこれを持っています:
@var title : String = "Home"
テンプレートの上部で宣言されていますが、次のエラーが発生します。
illegal start of simple expression """),_display_(Seq[Any](/*3.2*/var)),format.raw/*3.5*/(""" title : String = "Home"
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のソリューションは適切なものですが、他の可能性もあります。ビューのパラメーターを通常どおりデフォルト値で宣言できます。そのような場合は、テンプレート全体で使用できるようになり、から変更する可能性があります。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
いるため、制限される場合があります@{
ます。ページ用に生成されたScalaコードは次のように見えるため(通常のTwirlのものは削除されます)、内部のコードはコンパイルされたランタイムのようです。生成されたコード:
...
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>
}
Govind Singhの答えを試す人のために:パラメータリストの下
に変数を含むインポート行を配置する必要がありました。
@(title:String)(implicit session:play.api.mvc.Session)
@import java.math.BigInteger; var i=1; var k=1
動作します。
ただし、インポートステートメントの上に変数を含むインポートを配置します。
@import java.math.BigInteger; var i=1; var k=1
@(title:String)(implicit session:play.api.mvc.Session)
私のために動作せず、エラーが発生しました:
expected class or object definition
@isExcel= {@Boolean.valueOf(java.lang.System.getProperty(SettingsProperties.isExcel))}