2015-04-20 59 views
1

因此,我想创建一个用户配置文件,列出用户所发布的帖子。我的问题是通过每个用户名通过路由器和Meteor.publish /订阅。我不断收到“用户名未定义”将用户名传递给路由器参数

我想我的问题是:铁路如何知道“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> 

回答

0

你的路由代码是正确的,如果你console.logwaitOn的用户名或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出版物的名称后都作为参数传递给发布功能。