有一个问题是不知道哪个是触发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 :(得分: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。他们中的一些甚至不仅仅是文本。有些人会提供模板。