2011-01-25 116 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