如果我想要跨多個頁面(如菜單)具有通用的UI,建議如何執行此操作?Play框架是否支持「片段」?
它將包含模板代碼和後端控制器(類似於LiftWeb框架中的「片段」)。
我知道有一個Play的菜單模塊,但我更感興趣的是如何實現這一般。
如果我想要跨多個頁面(如菜單)具有通用的UI,建議如何執行此操作?Play框架是否支持「片段」?
它將包含模板代碼和後端控制器(類似於LiftWeb框架中的「片段」)。
我知道有一個Play的菜單模塊,但我更感興趣的是如何實現這一般。
有兩種方法可將普通視圖代碼添加到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(菜單,在本例中選擇)將可只是在相同的方式,如果你通過他們進入渲染方法的值。
謝謝 - 你能指點我使用renderArgs的任何示例代碼嗎? – sanity 2011-01-26 00:10:09