アクティブなメニュー項目のスタイルを設定したいのですが、これを行うには、現在の URL とルートを比較する必要があります。私はJavaScriptでこれを行うことができることを知っていますが、他の人がこれをどのように解決したのか疑問に思っていました.
助言がありますか?
擬似コード:
<a #{routeIsActive Application.index()} class="active"#{/if} href="@{Application.index()}">My Page</a>
アクティブなメニュー項目のスタイルを設定したいのですが、これを行うには、現在の URL とルートを比較する必要があります。私はJavaScriptでこれを行うことができることを知っていますが、他の人がこれをどのように解決したのか疑問に思っていました.
助言がありますか?
擬似コード:
<a #{routeIsActive Application.index()} class="active"#{/if} href="@{Application.index()}">My Page</a>
<a #{if request.action=="Application.index"}class="active"#{/if} href="@{Application.index()}">My Page</a>
簡単。:D
このソリューションは私にとってはかなりうまくいきました。非常にシンプルであるという利点があります。
アプリ/ビュー/タグ/navigationitem.js
%{
boolean isMatch = request.path.startsWith(_href.toString());
}%
<li class="sliding-element">
#{if isMatch}
<h3>${_title}</h3>
#{/if}
#{else}
<a href="${_href}">${_title}</a>
#{/else}
</li>
アプリ/ビュー/タグ/navigationmenu.js
#{js 'navigationmenu.js'/}
#{css 'navigationmenu.css'/}
<div id="navigation-block">
<ul id="sliding-navigation">
#{navigationitem title:'Home', href:@HomeController.index() /}
#{navigationitem title:'Search Contact', href:@SearchByContactController.index() /}
#{navigationitem title:'Edit Contact', href:@EditContactInfoController.index() /}
</ul>
</div>
残念ながら、これを行う簡単な方法が見つかりませんでした。私が見つけた最も簡単な解決策は、高速タグを作成することでした (ただし、これは、Groovy の経験が不足していることが原因である可能性があります)。
私はこれをこのコードで動作させました。
あなたの見解で
<a class="#{activeRoute href:@Application.index(), activeClass:'active' /}" href="@{Application.index()}">My Page</a>
次に、activeRoute 用の新しい FastTag を作成します。
public class MyFastTag extends FastTags {
public static void _activeRoute(Map<?, ?> args, Closure body, PrintWriter out, GroovyTemplate.ExecutableTemplate template, int fromLine) {
Router.ActionDefinition actionDef = (Router.ActionDefinition) args.get("href");
String activeStyle = (String) args.get("activeClass");
String inactiveStyle = (String) args.get("inactiveClass");
if (Http.Request.current().action.equals(actionDef.action) && activeStyle != null) {
out.print(activeStyle);
}
else if (!Http.Request.current().action.equals(actionDef.action) && inactiveStyle != null) {
out.print(inactiveStyle);
}
}
}
関連するインポートを必ず追加してください。
これにより、アクティブなクラスと非アクティブなクラスを指定できます。これは、要求したよりも少し多くなります。
このコードは私のために働きます
<li @if(request.path.startsWith("/artigo")){ class="active" }>
<a href="@routes.ArtigoController.telaLista"> Artigos</a>
</li>