您不能在上面的范例中在handlebars块中使用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 和名称(如果您在某种列表或其他内容中使用它)。
哈克方式
你仍然可以按照你想要的方式去做,但我建议不要这样做。我觉得效率有点低。
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..."
}
});