如果我想跨多个页面(如菜单)使用一个通用的UI,推荐的这样做方法是什么?
它包含模板代码和后端控制器(类似于LiftWeb框架中的“片段”)。
我知道有一个Play菜单模块,但我对总体上如何实现更感兴趣。
有两种方法可以将通用视图代码包含在Play框架中。
您可以使用#{include}标签或#{extends}标签。
#{include}
#{extends}
顾名思义,extends标签是从父视图扩展的。当您创建新的应用程序时,默认情况下,扩展标记用于Play设置的框架代码中。它扩展了main.html。您在此处添加代码。
includes标记允许您在指定点将通用的视图代码注入模板中。这项工作与php include / require或jsp includes的工作原理几乎相同。
当您的模板代码还需要模型中的数据或逻辑(通过控制器)时,就会出现问题。如果是这种情况,那么您将需要在控制器中使用@Before或@With表示法,以确保每次都执行通用的控制器代码。您可以将任何数据添加到renderArgs列表,以便可以在视图中使用。
一个使用renderArgs的简单示例将是。
@Before private static void commonData() { // do your logic here renderArgs.put("menu", menu); renderArgs.put("selected", selectedMenuItem); }
您放入renderArgs中的值(在示例中为菜单和选定值)将可用,就像您将它们传递给render方法一样。