Playframework是活动菜单项/路线

Leo*_*ley 13 playframework

我想设置活动菜单项的样式,为此我需要比较当前的URL再次路由.我知道我可以在javascript中执行此操作,但我想知道其他人是如何在游戏中解决这个问题的.

有什么建议?

伪代码:

<a #{routeIsActive Application.index()} class="active"#{/if} href="@{Application.index()}">My Page</a> 
Run Code Online (Sandbox Code Playgroud)

Jav*_*zzi 11

<a #{if request.action=="Application.index"}class="active"#{/if} href="@{Application.index()}">My Page</a>
Run Code Online (Sandbox Code Playgroud)

简单.:d


Cod*_*nci 3

不幸的是,我找不到一个简单的方法来做到这一点。我能找到的最简单的解决方案是编写一个快速标签(但这可能是由于我缺乏 Groovy 经验)。

我用这段代码得到了这个。

在你看来

<a class="#{activeRoute href:@Application.index(), activeClass:'active' /}" href="@{Application.index()}">My Page</a>
Run Code Online (Sandbox Code Playgroud)

然后,为 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);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

确保添加相关的导入。

这允许您指定一个活动和非活动类,这比您要求的要多一点