有没有办法为Iron Router路由器中定义的所有路径动态添加站点地图?
我在考虑这样的事情:
<ul>
{{#each paths}}
<li><a href="pathFor {{route}}">{{route}}</a></li>
{{/each}}
</ul>
此外,可能会在子ul
中显示相应的子路径?
显然我也可以手动创建列表,但是对于有50多个链接的应用程序,这是一项非常重要的工作。
答案 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>
注意:请记住将
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>
有关详细信息,请参阅getting the names of all routes for the accounts-entry package