0

grails にはメニューがあります。アクティブなページのメニュー項目を強調表示しようとしています:

link1
link2 (show as bold if the controller action partially matches this gsp name)
link3

私は動作するコードを持っていますが、もっと良い方法があるようです。

Taglib は正常に動作します:

def active = { attrs, body ->
    for (page in attrs.check) {
        if (params.action.startsWith(page)) {
            out << "current"
            break
        }
    }
}

このオプションは問題なく動作しますが、冗長に見えます:

<li><a href="${createLink(action: 'contactInfo')}" title="Contact Info" class="<xyz:active check='${['contactInfo']}'/>">Contact Info</a></li>
<li><a href="${createLink(action: 'aboutYouFamily')}" title="About You" class="<xyz:active check='${['aboutYouFamily', 'aboutYouBackground', 'aboutYouCharacteristics', 'aboutYouLifestyle', 'aboutYouApplicant2']}'/>">About You</a></li>

これは爆発します:

<g:link action='myProfile' class="${<xyz:active check='${['myControllerAction']}'/>}">My Profile</g:link>

taglib をパラメーターとして g:link に渡すことができるとは思えません

また、名前が付けられているため、複数の gsps/アクションによってリンクがアクティブになるという要件もあります。

aboutYouLocation
aboutYouBackground
aboutYouEducation

すべてがこのリンクをアクティブにします:

About You

部分的な一致を行うことはできますが、aboutYour (余分な R) で始まるアクション/gsps もいくつかあるため、配列の使用が taglib に渡されます。

4

1 に答える 1