我有一个Posts
集合,其中集合中的每个Post
都有一个userId
属性。在我的帖子详细信息页面上,我想使用pathFor
帮助程序将用户名称包含在其个人资料中。如果我只是包含{{pathFor 'userProfile'}}
,它会设置与帖子_id
的链接,正如人们所期望的那样,但我显然需要链接中的userId。
我已经尝试在模板的帮助器上创建第二个数据上下文,但是这也不起作用。
脚本:
Template.postPage.helpers({
user: function () {
return {_id: this.userId};
}
});
模板:
<template name="postPage">
{{#with user}}<a href="{{pathFor 'userProfile'}}">{{/with}}{{author}}</a>
</template>
如何将pathFor
与userId
文档中的Post
字段一起使用,而不是使用_id
doc中的Post
字段?< / p>
如果重要的话,我正在使用铁路由器。
答案 0 :(得分:1)
我认为你正在关注Iron Router's example route for pathFor
,因为你看起来像这样:
Router.map(function () {
this.route('postShow', {
path: '/posts/:_id'
});
});
这里的关键是:_id
可以是任何字段。因此,对于您的代码,请尝试:
Router.map(function () {
this.route('userProfile', {
path: '/users/:userId'
});
});
然后,路径中的:userId
对应于userId
文档中的Post
字段。
您也不需要模板助手或#with
块。您的模板现在只是:
<template name="postPage">
<a href="{{pathFor 'userProfile'}}">{{author}}</a>
</template>
并userProfile
路径发送整个Post
文档及其所有属性,包括文档_id
和userId
以及author
等等别的定义。该路线知道要选择什么,因为您已经告诉它:userId
而不是:_id
或:author
或其他。
答案 1 :(得分:1)
请注意,如果您使用的是铁路由器0.8.0,则您的路径标记应为:
<template name="postPage">
<a href="{{pathFor 'userProfile' params=this}}">{{author}}</a>
</template>
每https://github.com/EventedMind/iron-router/blob/master/lib/client/ui/helpers.js#L42:
/**
* Example Use:
*
* {{pathFor 'items' params=this}}
* {{pathFor 'items' id=5 query="view=all" hash="somehash"}}
* {{pathFor route='items' id=5 query="view=all" hash="somehash"}}
*/