是的,我认为 Play 的人是认真的。
第一的。
将变量定义为hardcoded
模板的元素是什么意思?好的,我知道您不想多次插入一个值,但是您展示的方式可以@defining
解决问题。另一方面 - 如果您只想放置变量以将其用作if
块中的条件,那也没有意义,因为您也可以编写类似的东西@if(1==1){ code }
来模拟某些行为。在其他情况下,您的变量应该由控制器确定,并且为了清楚起见,您可以使用一些 Map 来将变量组controllers
从view
.
第二。
Play 中的 Scala 模板只是函数,这意味着您还可以调用其他函数或方法。例如,您可以调用一些getter
或另一种方法,该方法将执行并返回您想要的任何内容。样本很多,所以我将跳过这部分。
第三。
如第二部分所述,如果您不喜欢@defining 方法,您可以在应用程序的某个位置(让我们考虑一下app/controllers/Application.java
)创建一些超级简单的方法来存储和设置/获取一些值。当然,如果您打算使用许多“变量”,最好将其存储在一张地图中,而不是为每个地图创建单独的 getter 和 setter。
在您的Application
控制器中,只需添加这些简单的方法(如果需要,还可以为其他类型创建自己的 getter)
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
通过设置和读取 Map 键和值来使用它
@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>
如您所见,您甚至可以执行一些基本操作,无论如何,对于更复杂的任务,我会将权重从(仅)模板引擎重定向到专用控制器的方法。