上記のパラダイムのハンドルバーブロックで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>');
}
});
また、1回の一括リクエストでデータをリクエストできる場合は、profileIdと名前ごとに非常に多くのデータを使用するように注意してMeteor.call
ください(これをある種のリストなどで使用している場合)。
ハッキーな方法
あなたはまだあなたが意図するようにそれをすることができます、しかし私はそれに対して忠告します。少し非効率だと思います。
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..."
}
});