Playframework 使用Play框架呈现侧边栏

Playframework 使用Play框架呈现侧边栏,playframework,Playframework,我正在尝试使用一个主内容div和一个侧边栏构建一个公共页面布局,其中包含: 通常的救济品 最近的评论。。。 最近的帖子。。。 其他小部件。。。 是否可以在侧边栏中呈现小部件,而无需对每个控制器中的小部件内容进行预防性绑定?即使模板中没有这样的小部件,我也必须获得所需的所有数据 我最近使用了,只会写。这将调用someWidget类中的news方法来呈现小部件。可以使用该方法从数据库检索数据,因此不需要预防性绑定。在控制器中保存不必要的数据库查询和不相关的代码时,是否有类似的功能?是。这里是我最

我正在尝试使用一个主内容div和一个侧边栏构建一个公共页面布局,其中包含:


通常的救济品
最近的评论。。。
最近的帖子。。。
其他小部件。。。
是否可以在侧边栏中呈现小部件,而无需对每个控制器中的小部件内容进行预防性绑定?即使模板中没有这样的小部件,我也必须获得所需的所有数据


我最近使用了,只会写
。这将调用
someWidget
类中的
news
方法来呈现小部件。可以使用该方法从数据库检索数据,因此不需要预防性绑定。在控制器中保存不必要的数据库查询和不相关的代码时,是否有类似的功能?

是。这里是我最喜欢的两个选择。正确的选项取决于您的特定用例

选项1-使用@before符号

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

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

选项2-使用AJAX


如您在示例中所做的那样,将几个div作为占位符,然后使用JQuery加载,该加载将在服务器端调用一个操作,仅为您需要的代码段生成一小段HTML。

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

@Util
public static List<Post> getPosts() { 
    ... 
}
@Util
公共静态列表getPosts(){
... 
}
然后从您的模板(可能是自定义标记)调用此选项:


%{ 
def posts=controllers.Post.getPosts()
(以职位取代职位){
}%
${post.header}
${post.body}

%{ } }%

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

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

  #{get 'moreWidgets' /}
http://www.playframework.org/documentation/1.1/tags#get

  #{get 'moreWidgets' /}