Iron Router / Meteor示例似乎都在命名路由中使用_id
,这有效。但是,我错过了一些东西,以便使用_id
以外的集合中另一个键的命名路由。具体来说,我使用的是tag
密钥。
'/ tags'route
此标记列表路由按预期工作:http://localhost:3000/tags
Router.route('/tags', {
name: 'demoTagsList',
waitOn: function() {
return Meteor.subscribe('tags');
},
data: function() {
return Tags.find();
}
});
pathFor
的{{1}}按预期工作
demoTagItem
与<a href="{{pathFor 'demoTagsList'}}">Tags</a>
一样 - &gt; Router.routes['demoTagsList'].url()
'/ tags /:_ tag'route
此特定标记路由也按预期工作,并返回相应的数据:http://localhost:3000/tags
"http://localhost:3000/tags/foo-tag"
但是,每个Router.route('/tags/:_tag', {
name: 'demoTagItem',
waitOn: function() {
return Meteor.subscribe('itemsFromTag', this.params._tag);
},
data: function() { return Posts.find({tags: this.params._tag}); }
});
路由的pathFor
会产生demoTagItem
。
null
- &gt; “http://localhost:3000null”
模板代码:
Router.routes['demoTagItem'].url()
设置路由器路径以便<template name="demoTagsList">
<h2>Demo Tag list</h2>
<ul>
{{#each tags}}
<li class="tag"><a href="{{pathFor 'demoTagItem'}}">#{{name}}</a></li>
{{/each}}
</ul>
</template>
选择pathFor
并将链接构建为{{name}}
需要做些什么?
答案 0 :(得分:1)
如果查看pathFor docs,您会看到该函数需要data
上下文来填写路径中的参数。您可以使用模板助手显式设置data
,如下所示:
<li class="tag"><a href="{{pathFor 'demoTagItem' data=getTag}}">#{{name}}</a></li>
其中getTag
是一个模板助手,它返回一个像{_tag: 'puppies'}
这样的对象。
但是,阻力最小的路径通常是将路径参数设置为与标记对象本身具有相同的字段名称。假设您的代码具有name
属性,您可以像这样修改您的路线:
Router.route('/tags/:name', {
name: 'demoTagItem',
waitOn: function() {
return Meteor.subscribe('itemsFromTag', this.params.name);
},
data: function() { return Posts.find({tags: this.params.name}); }
});
现在,您的模板不需要对原始代码进行任何修改,因为上下文已经是标记。这相当于写data=this
this
看起来像{name: 'puppies'}
。