如何使用Iron Router在Meteor中创建简单的userProfile路由

时间:2015-04-05 06:43:45

标签: meteor iron-router spacebars

我正在尝试使用Iron Router路由到当前用户的个人资料页面,但是' pathFor' Spacebars helper没有传递a标签的href属性。

这是我的模板:

<div class="collapse navbar-collapse" id="navigation">
  <ul class="nav navbar-nav">
    {{#if currentUser}}
      <li><a href="{{pathFor 'requestSubmit'}}">Submit Request</a></li>
      <li><a href="{{pathFor 'userProfile'}}">View Profile</a></li>
    {{/if}}
  </ul>
  <ul class="nav navbar-nav navbar-right">
    {{> loginButtons}}
  </ul>
</div>

提交请求按钮的href传入正常,但由于某种原因,View Profile href未被传入。

我的router.js如下:

Router.route('/users/:_id', {
  name: 'userProfile',
  data: function() {
    return Meteor.users.findOne(this.params._id);
  }
});

在我的应用中,我正在路由到单个&#34;请求&#34;页面(我创建了一个名为requests的集合)

Router.route('/requests/:_id, {
  name: 'requestPage',
  data: function() {
    return Requests.findOne(this.params._id);
  }
});

这正确地路由到来自Requests集合的单个请求,所以我很困惑为什么userProfile路由不会这样做。

此外,我尝试通过在模板上创建点击事件来强制执行此功能:

Template.header.events({
  'click .userProfile': function(e) {
    e.preventDefault();

    var user = Meteor.user();

    Router.go('userProfile', {_id: user._id});
  }
});

..这将正确的href传递给模板。

对此的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

userProfile路由需要id个参数。当您在仅包含路径名称的模板中调用pathFor时,它将尝试从当前上下文中提取参数。因为上下文不是用户(这是一个请求?),你最终会得到一条无效的路径。

您可以设置内联上下文:

<li><a href="{{pathFor 'userProfile' data=currentUser}}">View Profile</a></li>

或者,您可以使用with

在通话之外设置上下文
{{#with currentUser}}
  <li><a href="{{pathFor 'userProfile'}}">View Profile</a></li>
{{/with}}