将用户名传递给路由器参数
Passing Username to Router Parameters
所以我想创建一个用户个人资料,列出用户发布的帖子。我的问题是通过路由器将每个用户名传递到 Meteor.publish/subscribe。我不断收到 "username undefined"
我想我的问题是:Iron Router 如何知道 "this.params.username" 是什么? url 应该提供吗?
路由器
Router.route('userProfile',{
path: '/:username',
waitOn: function () {
return Meteor.subscribe('userprofile', this.params.username)},
data: function () {return {posts:Posts.find({username: this.params.username})};},
});
Meteor.publish
Meteor.publish('userprofile', function () {
return Posts.find({username: this.params.username});
});
模板
<template name="userProfile">
<div class="posts">
{{#each posts}}
{{> postItem}}
{{/each}}
</div>
</template>
您的路由代码是正确的,如果您 console.log
waitOn
或 data
中的用户名,您应该得到正确的值。
Router.route('userProfile', {
path: '/:username',
waitOn: function () {
console.log('waitOn', this.params.username);
return Meteor.subscribe('userprofile', this.params.username);
},
data: function () {
console.log('data', this.params.username);
return {
posts: Posts.find({username: this.params.username})
};
}
});
但是,您在发布函数中获取参数的方式是错误的,您应该像这样重写您的发布:
Meteor.publish('userprofile', function (username) {
return Posts.find({username: username});
});
您在发布名称后发送到 Meteor.subscribe
的参数将作为参数传递给发布函数。
所以我想创建一个用户个人资料,列出用户发布的帖子。我的问题是通过路由器将每个用户名传递到 Meteor.publish/subscribe。我不断收到 "username undefined"
我想我的问题是:Iron Router 如何知道 "this.params.username" 是什么? url 应该提供吗?
路由器
Router.route('userProfile',{
path: '/:username',
waitOn: function () {
return Meteor.subscribe('userprofile', this.params.username)},
data: function () {return {posts:Posts.find({username: this.params.username})};},
});
Meteor.publish
Meteor.publish('userprofile', function () {
return Posts.find({username: this.params.username});
});
模板
<template name="userProfile">
<div class="posts">
{{#each posts}}
{{> postItem}}
{{/each}}
</div>
</template>
您的路由代码是正确的,如果您 console.log
waitOn
或 data
中的用户名,您应该得到正确的值。
Router.route('userProfile', {
path: '/:username',
waitOn: function () {
console.log('waitOn', this.params.username);
return Meteor.subscribe('userprofile', this.params.username);
},
data: function () {
console.log('data', this.params.username);
return {
posts: Posts.find({username: this.params.username})
};
}
});
但是,您在发布函数中获取参数的方式是错误的,您应该像这样重写您的发布:
Meteor.publish('userprofile', function (username) {
return Posts.find({username: username});
});
您在发布名称后发送到 Meteor.subscribe
的参数将作为参数传递给发布函数。