Meteor & Flow Router:将动态生成的路径标记为 'active'

Meteor & Flow Router: Marking Dynamically generated paths as 'active'

不用说,我缺乏使用 Meteor 的经验。我来自 Rails 背景,与 Meteor 相比,您可以在视图中做更多的逻辑(和魔术)。

情况:我有一些路线看起来像 /things/:_id,我将那条路线命名为 'thing',因为它只显示用户拥有的许多路线中的一条 thing things:

FlowRouter.route('/things/:_id', {
  name: 'thing',
     action() {
       BlazeLayout.render('appPage', {app: 'thing', sidebar: "thingsListOnThing", header: 'thingTitle'});
     }
});

如您所见,我还加载了一个我构建的模板,用于在 sidebar 上列出用户拥有的所有物品,以便于导航。那个模板,thingsListOnThing就是这个问题的目标。

明白要点了吗?我可以使用 zimme:active-route 将显示带有用户 things 完整列表的模板的路由标记为 active,如下所示:

// A list of all a user's things
<div class="{{isActiveRoute name='things' class='is-active'}}">
List of Things
</div>

这个包很棒,但它不会帮助我处理看起来像 /things/:_id 的路线,因为,然后每个 link 到每个单独的东西都会 is-active 在任何 thing 页面,而不仅仅是当前路径的 :_id 与活动 thing.

_id 匹配的页面

我真的被困在这里了。我的第一个猜测是使用模板助手,但我不知道从哪里开始。

如果需要,请像我一样上传您需要的任何代码。我认为这是一个非常普遍的问题,你们可能不需要查看我的所有代码来理解我想要完成的事情。

使用:zimme:active-route

模板助手

Template.listOfThings.helpers({
  activeListClass(page) {
    const active = ActiveRoute.name('thing') && FlowRouter.getParam('_id') === this._id;
    return active && 'active';
  },
});

模板HTML:

  <a class="{{isActivePath 'thing'}}" href="/things/{{_id}}">
      <div class="thingListItem {{activeListClass page}}">
      {{title}}
      </div>
  </a>