我刚刚完成了应用程序的草稿,并认为是时候删除自动发布和不安全模式了。我开始将我在客户端上调用的所有杂散更新和插入方法转移到方法。但现在我无法从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个小时,我无法弄清楚为什么这个值会在控制台中返回但不会返回到模板。
答案 0 :(得分:4)
助手需要同步运行,不应有任何副作用。您应该确保发布该路由/模板所需的用户,而不是调用方法来检索用户。例如,您的路由器可以等待活动帖子和帖子的挑战者订阅。客户端拥有必要的文档后,您可以恢复原始代码。