2011-01-25 113 views
8

如果我想要跨多个页面(如菜单)具有通用的UI,建议如何执行此操作?Play框架是否支持“片段”?

它将包含模板代码和后端控制器(类似于LiftWeb框架中的“片段”)。

我知道有一个Play的菜单模块,但我更感兴趣的是如何实现这一般。

回答

11

有两种方法可将普通视图代码添加到Play框架中。可以使用#{include}标签或#{extends}标签。

顾名思义,extends标签从父视图扩展。当您创建新应用程序时,默认使用扩展标签在由Play设置的框架代码中。它扩展了main.html。你在这里添加你的代码。

包含标签,允许您在指定点向模板中注入常见的视图代码。这同样适用于php include/require,或者jsp包含工作。

当您的模板代码也需要模型中的数据或逻辑(通过控制器)时,问题就出现了。如果是这种情况,那么您需要在您的控制器中使用@Before或@With符号来确保每次都执行通用的控制器代码。您可以将任何数据添加到renderArgs列表中,以便在视图内使用它。

一个使用renderArgs的简单例子是。

@Before 
private static void commonData() { 
    // do your logic here 
    renderArgs.put("menu", menu); 
    renderArgs.put("selected", selectedMenuItem); 
} 

您放入renderArgs(菜单,在本例中选择)将可只是在相同的方式,如果你通过他们进入渲染方法的值。

+0

谢谢 - 你能指点我使用renderArgs的任何示例代码吗? – sanity 2011-01-26 00:10:09