在上面的范例中,您不能在把手块中使用 Meteor.call,主要是因为 javascript 的异步设计,当从服务器接收到值时,返回值已经返回。
Session
但是,您可以使用变量传递它:
Handlebars.registerHelper('get_handle', profileId, name, function() {
return new Handlebars.SafeString(Session.get("get_handle" + profileId + "_" + name));
});
//In a meteor.startup or a template.render
Meteor.call("getProfileLink", profileId, name, function(error, result) {
if (error) {
Session.set("get_handle" + profileId + "_" + name, '<a href="#">' + name + '</a>');
} else {
Session.set("get_handle" + profileId + "_" + name, '<a href="http://twitter.com/' + result + '">' + name + '</a>');
}
});
当您可以在一个批量请求中请求数据时,还要小心尝试Meteor.call
为每个 profileId 和 name 使用 have so many (如果您在某种列表或其他东西中使用它)。
哈克方式
您仍然可以按照您的意愿进行操作,但我建议您不要这样做。我认为它有点低效。
Handlebars.registerHelper('get_handle', profileId, name, function() {
if(Session.get("get_handle" + profileId + "_" + name)) {
return new Handlebars.SafeString(Session.get("get_handle" + profileId + "_" + name));
}
else
{
Meteor.call("getProfileLink", profileId, name, function(error, result) {
if (error) {
Session.set("get_handle" + profileId + "_" + name, '<a href="#">' + name + '</a>');
} else {
Session.set("get_handle" + profileId + "_" + name, '<a href="http://twitter.com/' + result + '">' + name + '</a>');
}
});
return "Loading..."
}
});