2011-04-09 51 views
0

不知道哪個是觸發grails中各種模板的最佳方法。 我正在嘗試對菜單進行硬編碼,但對於不同的區域仍然有不同的菜單。我個人發現它是一個浪費在數據庫上運行查詢來構建菜單。如何在Grails中觸發子視圖

快速查看代碼段和場景。 subnav是動態菜單。

<body> 
    <div id='navigation'> 
    Main menu list 
    </div> 
    <div id='subnav'> 
    Render grails template base on path 
    e.g. http://www.example.com/cars/ford => render ${ford} menu template 
     http://www.example.com/cars/toyota => render ${toyota} menu template 
    </div> 
</body> 

現在渲染模板是很容易的部分,因爲我可以只使用跟在模板名稱後面的變量。例如<g:render template="/layouts/${submenu-name}"/>

我不確定什麼是設置此變量的最佳方式。 (善良/邪惡的做法)

我是否會在url/uri中使用過濾器和小提琴來獲取我的位置,或者在需要時每次在控制器中設置它,還是使用我沒有想到的東西?

感謝

編輯:

不知道這是最好的做法,但可以說我有一個「汽車模板」和「摩托車模板」,然後我就用過濾器在視圖到達之前更改模型。

E.g.

def filters = { 
car(uri:'/car/*') { 
    after = { model -> model.menuTpl = 'car' } 
} 
bike(uri:'/bike/*') { 
    after = { model -> model.menuTpl = 'bike' } 
} 

然後在主視圖:

<g:render template="/layouts/${menuTpl}" /> 
+0

進行的更多更新 – pieterk 2011-04-10 22:21:45

回答

2

我沒有看到任何「邪惡」你的過濾選項。但只是爲了給予選擇,這是我在我的一個項目中所做的。

在我的佈局中,在正文中有一個標題部分,其中包含橫跨頁面的樣式欄。此欄包含像「登錄」,「儀表板」,「支持」等標題所以在我login.gsp,我有以下幾點:

<meta name="nav" content="login"/> 

而且在我main.gsp佈局,我有如下:

<g:if test="${pageProperty(name:'meta.nav') == 'login'}"> 
    <ul id="menu"> 
     <li>Login</li> 
    </ul> 
</g:if> 

我有幾個塊檢查meta.nav。其中一些甚至不僅僅是文本驅動。一些拉入模板。

相關問題