【发布时间】:2017-03-21 04:58:04
【问题描述】:
我浏览了网页,但在任何地方都没有找到答案。如果我遗漏了什么,请指点我的教程。
所以我想在 Play Framework 模板中定义一个变量,当然,以后再使用它。
目前我的代码如下所示:
@if(menuitems.fetchFromVerySlowDatabase() != null) {
<ul>
@for(menuitem <- menuitems.fetchFromVerySlowDatabase()) {
<li><a href="@menuitem.getUrl()">menuitem.getTitle()</a></li>
}
</ul>
}
我知道我可以缓存menuitems.fetchFromVerySlowDatabase,但我真正想要的是这样的:
@menuitems_from_database = menuitems.fetchFromVerySlowDatabase();
@if(menuitems_from_database != null) {
<ul>
@for(menuitem <- menuitems_from_database) {
<li><a href="@menuitem.getUrl()">menuitem.getTitle()</a></li>
}
</ul>
}
谢谢!
我使用 Java 作为编程语言。
最好, 舒贝
【问题讨论】:
-
我知道这并不能回答您的问题,但您可能应该在调用模板之前进行任何繁重的计算,并将结果作为参数传递,而不是在模板内执行操作,模板只能用于展示东西。
-
我同意,但是:我需要每个页面上的菜单项,所以我在模板中获取它们,否则每个控制器中的每个操作都需要将菜单项传递给模板系统。或者至少,这是我的想法。你有更好的解决方案吗?谢谢!
-
如果您在每个页面上都需要它们,您可能希望尽可能少地加载它们。根据它们的基础何时更新,您可能会考虑将它们作为一个值一次性加载到您的控制器中,或者使用某种缓存系统以避免在每个页面上获取它们,特别是如果,正如名称似乎表明的那样,该操作需要很长时间。然后,您可以创建一个将此值传递给模板调用程序的函数。
-
是的,我正在尝试尽可能少地加载它。实际上,这几乎解决了(通过缓存)。但我真的想避免将菜单项作为参数单独传递给每个模板。
-
关于菜单。有一个很好的描述stackoverflow.com/questions/9629250/…,我只能补充说你也可以添加缓存,play也有缓存API:playframework.com/documentation/2.5.x/JavaCache
标签: scala playframework-2.0 twirl