はい、Play 男子は本気だと思います。
初め。
hardcoded
変数をテンプレートの要素として定義する意味は何ですか? 1つの値を何度も挿入したくないことは理解していますが、示した方法@defining
で問題が解決します。一方、変数をif
ブロック内の条件として使用するためだけに変数を配置したい場合、それも意味がありません@if(1==1){ code }
。何らかの動作をシミュレートするようなものを書くこともできるからです。controllers
それ以外の場合、変数はコントローラーによって決定される必要があります。明確にするために、変数のグループを からに渡すための Map を例として使用できますview
。
2番。
Play の Scala テンプレートは単なる関数です。つまり、他の関数やメソッドを呼び出すこともできます。getter
例として、必要なものを実行して返す何らかのメソッドを呼び出すことができます。サンプルが多いので割愛します。
三番。
2 番目の部分で述べたように、@defining アプローチが気に入らないapp/controllers/Application.java
場合は、値を保存および設定/取得するための非常に単純なメソッドをアプリのどこかに作成することができます (これは と考えてください)。もちろん、多くの「変数」を使用する予定がある場合は、それぞれに個別のゲッターとセッターを作成するのではなく、1 つのマップに格納することをお勧めします。
コントローラーで、Application
これらの単純なメソッドを追加するだけです(必要に応じて、他のタイプの独自のゲッターも作成します)
private static Map<String, Object> map = new HashMap<String, Object>();
// setter
public static void setValue(String key, Object value) {
map.put(key, value);
}
// general getter would work well with String, also numeric types (only for displaying purposes! - not for calculations or comparisons!)
public static Object getValue(String key) {
return map.get(key);
}
public static Boolean isTrue(String key) {
return Boolean.valueOf(map.get(key).toString());
}
public static Double getDouble(String key) {
return Double.valueOf(map.get(key).toString());
}
次にview
、マップのキーと値を設定して読み取ることで、それを使用できます
@Application.setValue("name", "Stefan")
@Application.setValue("age", 30)
@Application.setValue("developer", false)
@Application.setValue("task1", 123.5)
@Application.setValue("task2", 456.7)
<h1>ellou' @Application.getValue("name")!</h1>
<div>
Today there are your @Application.getValue("age") birthday!
</div>
<div>
You are @if( Application.isTrue("developer") ) {
very big developer
} else {
just common user
}
</div>
<div>
Once again: @{ val status = if (Application.isTrue("developer")) "veeeeery big developer" else "really common user"; status }
</div>
<div>
Today you earned $ @{ Application.getDouble("task1") + Application.getDouble("task2") }
</div>
<div> etc... </div>
ご覧のとおり、いくつかの基本的な操作を実行することもできますが、より高度なタスクの場合は、重みを (単なる) テンプレート エンジンから専用コントローラーのメソッドにリダイレクトします。