从ID获取用户名而不自动发布

时间:2015-02-12 18:59:03

标签: meteor meteor-accounts meteor-helper

我刚刚完成了应用程序的草稿,并认为是时候删除自动发布和不安全模式了。我开始将我在客户端上调用的所有杂散更新和插入方法转移到方法。但现在我无法从ID中返回用户名

之前我的功能:(有效,直到我删除了自动发布)

challenger: function() {
  var postId = Session.get('activePost');
  var post = Posts.findOne(postId);
  if (post.challenger !== null) {
    var challenger = Meteor.users.findOne(post.challenger);
    return challenger.username;
  }
  return false;
}

现在我正在尝试:

Template.lobby.helpers({
  challenger: function() {
    var postId = Session.get('activePost');
    var post = Posts.findOne(postId);
    if (post.challenger !== null) {
      var userId = post.challenger;
      Meteor.call('getUsername', userId, function (err, result) {
        if (err) {
          console.log(err);
        }
        return result;
      });
    }
    return false;
  },

使用:

Meteor.methods({
    getUsername: function(userId) {
        var user = Meteor.users.findOne({_id: userId});
        var username = user.username;
        return username;
    },
    ...
})

我试过阻止代码,只在定义了代码后返回值,并在call-callback中返回console.logging(它将正确的用户名返回到控制台,但视图保持不变)

希望有人能找到我正在犯的明显错误,因为我已经尝试了3个小时,我无法弄清楚为什么这个值会在控制台中返回但不会返回到模板。

1 个答案:

答案 0 :(得分:4)

助手需要同步运行,不应有任何副作用。您应该确保发布该路由/模板所需的用户,而不是调用方法来检索用户。例如,您的路由器可以等待活动帖子和帖子的挑战者订阅。客户端拥有必要的文档后,您可以恢复原始代码。