2

所以我在Bootstrap-3 中找到了这个导航栏功能,但到目前为止我使用的是 Flow-Router 而不是 Iron-Router。因此,我正在寻求将这个辅助函数转换为 Flow-Router 术语:

Template.navItems.helpers({
    activeIfTemplateIs: function (template) {
      var currentRoute = Router.current();
      return currentRoute &&
        template === currentRoute.lookupTemplate() ? 'active' : '';
    }
});

我已经尝试解决问题(虽然没有费心对其进行测试,因为我的网站/应用程序的许多部分仍然无法运行),但我需要以“是”或“否”的形式进行确认,并且也许更多关于我做错了什么的信息。

Template.navItems.helpers({
    activeIfTemplateIs: function (template) {
      var currentRoute = FlowRouter.current();
      return currentRoute &&
        template === currentRoute.name ? 'active' : '';
    }
});

我从Flow-Router API引导自己。这个解决方案是正确的,还是出于某种原因或其他严格地必须与 Iron-Router 一起使用?

4

3 回答 3

6

在进一步考虑了您的实际问题之后,我意识到我正在以完全不同的方式在我的应用程序中执行此操作,也许您可​​能会发现该模式很有用。我的应用程序还使用引导程序并有一个导航,我想在其中突出显示活动路线(并取消突出显示所有其他路线)。

在铁路由器中,我这样做:

onAfterAction(){
  const selector = '.nav a[href="/' + Router.current().route.getName() + '"]'; // the nav item for the active route (if any)
  $('.nav-active').removeClass('nav-active'); // unhighlight any previously highlighted nav
  $(selector).addClass('nav-active'); // highlight the current nav (if it exists, many routes don't have a nav)
}

在 Flow-Router 中,onAfterAction被替换为triggersExit,您可以执行以下操作:

triggersExit(){
  const selector = '.nav a[href="' + FlowRouter.current().path + '"]';
  $('.nav-active').removeClass('nav-active');
  $(selector).addClass('nav-active');
}

我发现这比使用空格键模板更方便。

仅供参考,您有几个选择来获取路线名称:

FlowRouter.getRouteName() // reactive

或者

FlowRouter.current().route.name // NOT reactive
于 2015-09-27T20:59:29.517 回答
3

现在您可以使用Active-Route 包

例如:

<a class="nav-tab {{isActivePath class='nav-current' path='/new'}}" href="/new">
  New
</a>
于 2016-04-23T21:33:20.173 回答
0

为了给你一个更完整的画面,这就是我的项目所做的。

模板 HTML 代码

<template name="topNavbar">
<nav class="navbar navbar-default">
  <ul class="nav navbar-nav">
    <li><a class="navbar-brand" href="/">Sample</a></li>

    <li class="{{ activeIfTemplateIs 'home' }}">
      <a href="/home">Home</a>
    </li>

    <li class="{{ activeIfTemplateIs 'users' }}">
      <a href="/users">Users</a>
    </li>

  </ul>
</nav>
</template>

JavaScript 代码

Template.topNavbar.helpers({
  activeIfTemplateIs: function (template) {
    var currentRoute = FlowRouter.getRouteName();
    return currentRoute && template === currentRoute ? 'active' : '';
  }
});
于 2016-04-11T00:32:26.967 回答