首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NavigableMap构建菜单

从NavigableMap构建菜单
EN

Stack Overflow用户
提问于 2019-01-30 15:12:12
回答 1查看 71关注 0票数 2

在Grails3.3应用程序中,我试图创建一个菜单配置,我想为此使用application.groovy。

application.groovy:

代码语言:javascript
复制
mainmenuconfig {
    menuitem_1 {
        id = 'menuitem-1'
        name='Home'
        sub=null
    }
    menuitem_2 {
        id ='menuitem-2'
        name='Stammdaten'
        sub = submenuitem_2 {
            menuitem_2_1 {
                id = 'menuitem-2-1'
                name ='Stamm-A'
                sub=null
            }
    }}
}

通过grailsApplication.config.get('mainmenuconfig')检索配置将给我以下信息:

代码语言:javascript
复制
[menuitem_1:[id:menuitem-1, name:Home, sub:null], menuitem_2:[id:menuitem-2, name:Stammdaten, submenuitem_2:[menuitem_2_1:[id:menuitem-2-1, name:Stamm-A]], sub:null]]

如果我看getClass(),它说是org.grails.config.NavigableMap

现在,根据我的理解,生成<UL> ... <LI>树应该在视图层中完成。为了迭代这个结构,我需要递归,因为它可以是n级深。

如果我从main.gsp上查看,我知道要插入菜单树的位置,但是如何将数据带到那里,在哪里进行递归呢?我需要一个从GSP调用的菜单控制器吗?普惠制不应该这样做。另一方面,任何控制器都不应该生成<UL> ... <LI>树。我需要胶水片。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 15:38:39

这听起来是对拦截器的一个很好的使用。您可以在每次操作完成后将其添加到您的模型中。然后,您的视图将可以访问其模型中的menu,并可以构建菜单。如果递归用于显示目的,则可以在视图中进行递归。

代码语言:javascript
复制
class NavigationMenuInterceptor {

    NavigationMenuInterceptor() {
        matchAll()
    }

    boolean after() {
        model.menu = grailsApplication.config.getProperty('mainmenuconfig', Map)
        true
    }
}

若要呈现菜单,可以使用递归呈现自身的模板。取决于您想要的HTML输出,它可能如下所示。

在主体中:

代码语言:javascript
复制
<ul>
    <g:each in="${menu}" var="menuitem">
        <g:render template="menuitem" model="[menuitem: menuitem]"/>
    </g:each>
</ul>

在模板_menuitem.gsp

代码语言:javascript
复制
<li id="${menuitem.id}">
    ${menuitem.name}
</li>
<g:if test="${menuitem.sub}">
    <li>
        <ul>
            <g:render template="menuitem" model="[menuitem: menuitem.sub]"/>
        </ul>
    </li>
</g:if>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54443715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档