这条到user_profile的路由有什么问题?

时间:2014-08-14 09:58:29

标签: javascript html meteor iron-router

我正在尝试将个人资料页面添加到显微镜应用程序中。感谢我的帮助here我能够使其中的大部分工作,但我无法获得其他用户配置文件的路由。这是路线的代码。感谢

在comment.html模板中

<span class="author"><a href="{{pathFor 'user_profile'}}">{{username}}</a></span>

router.js

this.route('user_profile',{
    path: '/profile/:_username',
    waitOn: function () {
    return Meteor.subscribe('userprofile', this.params._username)
  },
    data: function () {return user.findOne(this.params._username)}
});

publications.js

Meteor.publish('userprofile', function (username) {
   return user.find(username);
}); 

profile.js

Template.user_profile.helpers({
  username: function() {
      return this.user().username;
  },
  bio: function() {
      return this.user().profile.bio;
  }
});

1 个答案:

答案 0 :(得分:1)

帐户基础和帐户密码使用的默认Meteor用户集合为Meteor.users,而不是user。此外,collection.find(x)会找到_idx的文档;如果您要查找usernamex的文档,则需要collection.find({username: x})

this.route('user_profile',{
  path: '/profile/:username',
  waitOn: function () {
    return Meteor.subscribe('userprofile', this.params.username)
  },
  data: function () {return Meteor.users.findOne({username: this.params.username})}
});

我将_username参数重命名为username,这样pathFor帮助器就可以自动填充它。我还将user替换为Meteor.users并传入正确的选择器。

Meteor.publish('userprofile', function (username) {
  return Meteor.users.find(
    {username: username},
    {fields: {username: 1, profile: 1}}
  );
}); 

我将user替换为Meteor.users并再次修复了选择器,我限制了我们发布的字段(因为用户文档包含敏感数据,如登录令牌,您不想发布整件事。)

Template.user_profile.helpers({
  username: function() {
    return this.username;
  },
  bio: function() {
    return this.profile.bio;
  }
});

user_profile模板中,数据上下文(您在路由中的data参数中指定)是用户文档,因此this已经是用户文档。请注意,这些帮助程序是多余的(即使没有这些帮助程序,您也可以使用{{username}}获取用户名,使用{{profile.bio}}获取bio)。