2015-04-05 52 views
0

我试图使用铁路由器路由到当前用户的配置文件页面,但'pathFor'Spacebars帮助程序未传递标签的href属性。如何使用铁路路由器在Meteor中创建简单的userProfile路由

这是我的模板:

<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是传递得很好,但由于某些原因,查看资料href是没有得到传入

我的路由器。 JS如下:

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

在我的应用程序,我路由到一个“请求”页面做

(我创建了一个名为集合请求)
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

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}} 
+0

谢谢!那就是诀窍。 – 2015-04-05 22:20:51

相关问题