将用户名传递给路由器参数

时间:2015-04-20 20:39:30

标签: meteor iron-router meteor-blaze

所以我想创建一个用户个人资料,列出用户发布的帖子。我的问题是将每个用户名通过路由器并传递到Meteor.publish / subscribe。我一直在"用户名未定义"

我想我的问题是:Iron Router如何知道" this.params.username"是?网址应该提供吗?

路由器

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>

1 个答案:

答案 0 :(得分:0)

您的路由代码是正确的,如果console.log waitOndata内的用户名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

在发布名称之后发送给{{1}}的参数作为参数传递给发布函数。