Meteor.js - 使用带有“外键”的pathFor

时间:2013-12-10 18:34:24

标签: meteor iron-router

我有一个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>

如何将pathForuserId文档中的Post字段一起使用,而不是使用_id doc中的Post字段?< / p>

如果重要的话,我正在使用铁路由器。

2 个答案:

答案 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文档及其所有属性,包括文档_iduserId以及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"}}
*/