首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Play Framework渲染边栏

使用Play Framework渲染边栏
EN

Stack Overflow用户
提问于 2012-01-17 03:31:04
回答 3查看 1K关注 0票数 7

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

代码语言:javascript
复制
<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>

在不对每个控制器中的小部件内容进行预防性绑定的情况下,是否可以在侧边栏中呈现小部件?即使模板中没有这样的小部件,我也必须获取所需的所有数据。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-17 04:58:13

是。以下是我首选的两个选项。正确的选择取决于您的特定用例。

选项1-使用@before符号

通过使用@before注释,您可以对调用的每个操作执行公共处理。它将在执行main操作之前执行该方法,允许您将数据存储在视图中可用的renderArgs映射中。

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

选项2-使用AJAX

将一些div作为占位符,就像您在示例中所做的那样,然后使用HTML,它将在您的服务器端调用一个操作,为您需要的代码片段生成一小段JQuery。

票数 5
EN

Stack Overflow用户

发布于 2012-01-17 16:56:35

您可以从模板调用静态控制器方法。注意@Util - Annotation告诉Play这不是一个action - method:

代码语言:javascript
复制
@Util
public static List<Post> getPosts() { 
    ... 
}

然后从您的模板(可能是一个自定义标记)中调用它:

代码语言:javascript
复制
<div class="widget">
%{ 
    def posts=controllers.Post.getPosts()

    for(post in posts) { 
    }%
        <h2>${post.header}</h2>
        <p>${post.body}</p>
    %{ 
    } 
}% 
</div>

因为这违反了纯MVC模式,所以我不建议大量使用它。但如果使用得当,它可能是一个非常实用的解决方案。在一般布局中构建侧边栏的用例是完全有效的用法(在我看来)-如果您后来决定在主内容中提供数据的json表示,则不会使用布局侧边栏-因此在使用此模式时不会获取数据。

票数 2
EN

Stack Overflow用户

发布于 2012-01-18 16:41:44

如果您希望每个页面具有不同的小部件,则可以使用get/set模板标记

代码语言:javascript
复制
  #{get 'moreWidgets' /}

http://www.playframework.org/documentation/1.1/tags#set http://www.playframework.org/documentation/1.1/tags#get

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8885276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档