Meteorアプリでは、次のようなことをたくさん書いています。
Templates.myTemplate1.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
Templates.myTemplate2.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
Session内に保存されている同じ単純な値にアクセスするには、多くの異なるテンプレート(ハンドルバーを使用しています)が必要です。
同じ関数を何度も書くのを避ける方法はありますか?ありがとう
Meteorは現在、デフォルトのテンプレートエンジンとしてハンドルバーを使用しているため、次のようなヘルパーを定義できます。
if (Meteor.isClient) {
Template.registerHelper('isCurrentUser',function(input){
return Session.get("isCurrentUser");
});
}
これは、新しいファイルで行うことができます。 app.jsファイルをよりクリーンに保つためにhelpers.jsと呼ばれます。このヘルパーが登録されると、{{isCurrentUser}}
を挿入することにより、任意のテンプレートで使用できます。
@ cioddi の答えに基づいて、Handlebarsヘルパーにパラメーターを渡すことができるので、任意の値を動的に簡単に取得できるように、それを汎用関数にすることができます。
Template.registerHelper('session',function(input){
return Session.get(input);
});
次に、このようにテンプレートで呼び出すことができます
{{session "isCurrentUser"}}
auth packages には、ユーザーがログインしているかどうかを検出するために使用できるCurrentUserという名前のグローバルヘルパーが付属していることに注意してください。
{{#if currentUser}}
...
{{/if}}
みんなに注意してください:0.8.0のリリースで、Handlebars.registerHelper
は非推奨になりました。新しいBlazeエンジンを使用して、UI.registerHelper
はこれを達成するための新しい方法です。
@cioddiのコードの更新バージョン
UI.registerHelper('isCurrentUser',function(input){
return Session.get("isCurrentUser");
});
実際、今では{{#if currentUser}}
を使用できます
これは、accounts/authパッケージに含まれているグローバルです。
流星のこれらのハンドルバーヘルパーをチェックすることをお勧めします: https://github.com/raix/Meteor-handlebar-helpers
たくさんのセッションヘルパーがあり、そのうちの1つはあなたが望むことをします。ドキュメントから:
Is my session equal to 4?: {{$.Session.equals 'mySession' 4}}
isCurrentUserTemplate
を追加して、これを他のテンプレートに含めることができます。
{{> isCurrentUserTemplate}}