我使用Play Framework 2.5,我在模板中使用了几个JAVA类。我用
创建了一次对象@import MyClass;
@foo = @{new MyClass(bar)}
只有那个代码,MyClass的构造函数没有被调用(我已经在构造函数中放了一个调试输出,也检查了它的调用)
现在我使用JAVA类的功能,如
@foo.getMeSomeBar()
模板中的某个地方。现在,调用构造函数。问题:每次我在同一个模板中使用该类的函数时,都会调用构造函数。
如果我将该scala变量传递给另一个模板,如
,则会出现同样的问题@otherTemplate(foo)
每次在otherTemplate中使用foo时,都会调用构造函数。
这是理想的行为吗?如果是,为什么?如果不是,我该如何避免呢?
编辑:如果我在Controller中创建MyClass对象并将其从那里传递给模板,构造函数只被调用一次。但在某些情况下,如果必须在模板中创建MyClass,或者我必须更改很多类。
答案 0 :(得分:2)
根据documentation,您不应使用 <footer>
<div class="block three-cols">
<div>50%</div>
<div>25%</div>
<div>25%</div>
<div>50%</div>
<div>25%</div>
<div>25%</div>
<div>50%</div>
<div>25%</div>
<div>25%</div>
</div>
</footer>
来定义可重用的值。首选方法是
@foo = @{ ... }
您的方式可能会产生意外结果,例如每次调用时都会重新运行块中的代码。