我有一个'profile'
模板,我将在其中显示与用户相关的内容。所以我想为模板制作路线,但在'path'
我想动态插入当前用户的用户名。就我们动态更改关于帖子ID和所有内容的网址的方式而言。
这是目前的路由器代码块。
Router.map(function() {
this.route('profile', {
path: '/profile', //here instead of 'profile' I wanna dynamically insert the current user's username.
});
});
顺便说一句,我能够将用户相关数据加载到所述模板中。
我尝试以试错法的方式将用户名(/username
)加载到路径路径,但是徒劳无功。 :(
我想我毕竟不是很好用铁路由器。请帮忙。
答案 0 :(得分:1)
我也曾在这个问题上苦苦挣扎......然后我遇到了this SO answer。在我的情况下,我做的一切正常,除了没有传递用户名和模板pathFor
链接助手。
出于某种原因,在铁路由器路由中使用:_id
时,无需在pathFor
帮助程序中引用它。这是我困惑的根源,也许是其他人。同样。
以下是在铁路由器的路径中使用用户名的示例代码:
<强> router.js 强>
this.route('/:username', {
name: "dashboard",
waitOn: function() {
return Meteor.subscribe("allUserData");
},
data: function() {
return Meteor.users.findOne();
}
});
publications.js
Meteor.publish("allUserData", function() {
if (this.userId) {
return Meteor.users.find(this.userId)
} else {
this.ready()
}
})
<强> page.html中强>
<a href="{{pathFor 'dashboard' username=username}}">
User Dashboard
</a>
同样,至少在我的特定情况下,我错过了上述username=username
。
答案 1 :(得分:0)
你试过这个吗?
this.route('profile', {
path: '/:username',
data: function() { return Meteor.user().username; }
});
答案 2 :(得分:0)
Router.map(function() {
this.route('profile', {
path: '/:_username', //dynamic parameter username
data: function() {
//here you will get the username parameter
var username = this.params.username;
return {
user: Meteor.users.find({ username: username }) //you can use user object in template
};
}
});
});
答案 3 :(得分:0)
不要忘记路线上的waitOn
属性。大部分时间只是关闭的时间,为此创建出版物是解决该问题的最佳方式..
服务器端publications.js
:
Meteor.publish('me', function() {
if(!this.userId) return false;
else return Meteor.users.find({_id: this.userId});
});
在您的Router.map()
路线之一:
this.route('me', {
template: 'profile',
notFoundTemplate: 'profile_not_found',
path: '/profile',
waitOn: function() {
return Meteor.subscribe("me");
},
data: function() {
return Meteor.user();
}
});
不要忘记这些配置位:
// Router config.. pretty self explanatory
Router.configure({
layoutTemplate: 'main',
notFoundTemplate: 'not_found',
loadingTemplate: 'loading'
});
// handle the loading screen
Router.onBeforeAction('loading');
// make sure you define routes here that rely on data to throw back
// 404/not found equivalent pages. e.g. no search results found,
// or in this case profile not found
Router.onBeforeAction('dataNotFound', {only: ['profile']});
您可以使用个人资料模板:
<template name="profile">
Current user Id: {{_id}}
</template>
<template name="profile_not_found">
Profile not found. Are you logged in?
</template>