繁体   English   中英

如何在Grails中触发子视图

[英]How to trigger sub views in 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中进行调整以获取我的位置或者我是否每次都在控制器中设置它或者使用我没想过的东西?

谢谢

编辑:

不确定这是否是最好的做法,但是假设我有一个“汽车模板”和“摩托车模板”,那么我只是使用过滤器在视图到达之前更改模型。

例如

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

然后在主视图中:

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

我没有看到任何关于你的过滤器选项的“邪恶”。 但只是为了给出选项,这就是我在我的一个项目中所做的事情。

在我的布局中,正文中有一个标题部分,其中包含一个穿过页面的样式栏。 此栏包含“登录”,“仪表板”,“支持”等标题。因此,在我的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。 他们中的一些甚至不仅仅是文本。 一些拉模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM