1

我刚刚完成了我的应用程序的草稿,并认为是时候删除自动发布和不安全模式了。我开始将我在客户端调用的所有杂散更新和插入方法转移到方法中。但是现在我无法从 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;
    },
    ...
})

我尝试阻止代码,仅在定义后才返回值,并在调用回调中调用 console.logging(将正确的用户名返回到控制台,但视图保持不变)

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

4

1 回答 1

4

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

于 2015-02-12T19:09:28.133 回答