查找Iron Router

时间:2015-09-17 11:22:00

标签: javascript meteor iron-router

有没有办法为Iron Router路由器中定义的所有路径动态添加站点地图?

我在考虑这样的事情:

<ul>
    {{#each paths}}
        <li><a href="pathFor {{route}}">{{route}}</a></li>
    {{/each}}
</ul>

此外,可能会在子ul中显示相应的子路径?

显然我也可以手动创建列表,但是对于有50多个链接的应用程序,这是一项非常重要的工作。

1 个答案:

答案 0 :(得分:2)

当然!正如Kassym所说,Router.routes包含所有路线的列表。但是它包含路由器功能,因此您必须使用route.getName()获取其名称。默认路线没有名称,因此您必须改为抓取.path()

整个事情应该在你的助手中看起来像这样:

Template.allRoutes.helpers({
  paths: function () {
    var allRoutes = _.map(Router.routes, function(route){
      var routeName = typeof route.getName() === 'undefined' ?
                      route.path() :
                      route.getName(); 
      return {route: routeName}
    });
    return allRoutes
  }
});

这在您的模板中:

<template name="allRoutes">
  {{#each paths}}
    <li><a href="{{pathFor route}}">{{route}}</a></li>
  {{/each}}
</template>

Working Demo in MeteorPad

  

注意:请记住将pathFor括在大括号中,因为它是一个帮助方法。它将执行javascript并继承当前的datacontext,因此您可以从当前上下文传递任何属性。

为了显示 n 深度的子路径,您可以递归调用模板,如下所示:

<template name="subpaths">
  <ul>
  {{#each subpaths}}
    <li>
      <a href="{{pathFor path}}">{{path}}</a>
      {{#if subpaths}} {{>subpaths}} {{/if}}
    </li>
  {{/each}}
  </ul>
</template>

Demo in meteor pad

有关详细信息,请参阅getting the names of all routes for the accounts-entry package