使用Play框架渲染边栏

Dav*_*ave 7 playframework

我正在尝试使用主要内容div和带有Play框架的侧边栏构建一个通用页面布局:

<html>
<head></head>
<body>
<div id="all">
  <div id="content">the ususal doLayout stuff</div>
  <div id="sidebar">
     <div class="widget">Recent comments...</div>
     <div class="widget">Recent posts...</div>
     other Widgets...
  </div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

是否可以在侧边栏中呈现窗口小部件而不预先绑定每个控制器中窗口小部件的内容?即使模板中没有这样的小部件,我也必须获得所需的所有数据.

我最近使用了Lift Framework,可以写一下<div class="lift:someWidget.news">.这会调用类中的news方法someWidget来呈现窗口小部件.可以在该方法中从数据库中检索数据,因此不需要预防性绑定.在Play中有类似的东西可以在控制器中保存不必要的数据库查询和不相关的代码吗?

Cod*_*nci 5

是.这是我首选的两个选项.正确的选择取决于您的特定用例.

选项1 - 使用@before表示法

通过使用@before注释,您可以对调用的每个操作执行常见处理.它将在执行主操作之前执行该方法,允许您将数据存储renderArgs在视图中可用的地图中.

然后,可以在主模板中访问视图中的此数据,因此可在所有视图中使用.

选项2 - 使用AJAX

将几个div作为占位符放在您的示例中,然后使用将在服务器端调用操作的JQuery加载来生成一小段HTML,仅用于您需要的代码段.