如何使用 Iron Router 在 Meteor 中创建简单的 userProfile 路由
How to create simple userProfile route in Meteor with Iron Router
我正在尝试使用 Iron Router 路由到当前用户的个人资料页面,但是 'pathFor' Spacebars 助手没有传递 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 传递得很好,但由于某种原因,“查看配置文件”href 未被传递。
我的router.js如下:
Router.route('/users/:_id', {
name: 'userProfile',
data: function() {
return Meteor.users.findOne(this.params._id);
}
});
在我的应用程序中,我通过
路由到单个 "request" 页面(我创建了一个名为 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 传递给模板。
如有任何帮助,我们将不胜感激!
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}}
我正在尝试使用 Iron Router 路由到当前用户的个人资料页面,但是 'pathFor' Spacebars 助手没有传递 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 传递得很好,但由于某种原因,“查看配置文件”href 未被传递。
我的router.js如下:
Router.route('/users/:_id', {
name: 'userProfile',
data: function() {
return Meteor.users.findOne(this.params._id);
}
});
在我的应用程序中,我通过
路由到单个 "request" 页面(我创建了一个名为 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 传递给模板。
如有任何帮助,我们将不胜感激!
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}}