web-dev-qa-db-ja.com

Meteorテンプレートはセッション変数に直接アクセスできますか?

Meteorアプリでは、次のようなことをたくさん書いています。

Templates.myTemplate1.isCurrentUser = function() {
  return Session.get("isCurrentUser");
};


Templates.myTemplate2.isCurrentUser = function() {
  return Session.get("isCurrentUser");
};

Session内に保存されている同じ単純な値にアクセスするには、多くの異なるテンプレート(ハンドルバーを使用しています)が必要です。

同じ関数を何度も書くのを避ける方法はありますか?ありがとう

26
George Strakhov

Meteorは現在、デフォルトのテンプレートエンジンとしてハンドルバーを使用しているため、次のようなヘルパーを定義できます。

if (Meteor.isClient) {

Template.registerHelper('isCurrentUser',function(input){
  return Session.get("isCurrentUser");
});

}

これは、新しいファイルで行うことができます。 app.jsファイルをよりクリーンに保つためにhelpers.jsと呼ばれます。このヘルパーが登録されると、{{isCurrentUser}}を挿入することにより、任意のテンプレートで使用できます。

28
cioddi

@ cioddi の答えに基づいて、Handlebarsヘルパーにパラメーターを渡すことができるので、任意の値を動的に簡単に取得できるように、それを汎用関数にすることができます。

Template.registerHelper('session',function(input){
    return Session.get(input);
});

次に、このようにテンプレートで呼び出すことができます

{{session "isCurrentUser"}}

auth packages には、ユーザーがログインしているかどうかを検出するために使用できるCurrentUserという名前のグローバルヘルパーが付属していることに注意してください。

{{#if currentUser}}
    ...
{{/if}}
46
jtblin

みんなに注意してください:0.8.0のリリースで、Handlebars.registerHelperは非推奨になりました。新しいBlazeエンジンを使用して、UI.registerHelperはこれを達成するための新しい方法です。

@cioddiのコードの更新バージョン

UI.registerHelper('isCurrentUser',function(input){
  return Session.get("isCurrentUser");
});
12
mjkaufer

実際、今では{{#if currentUser}}を使用できます

これは、accounts/authパッケージに含まれているグローバルです。

http://docs.meteor.com/#template_currentuser

5
George Katsanos

流星のこれらのハンドルバーヘルパーをチェックすることをお勧めします: https://github.com/raix/Meteor-handlebar-helpers

たくさんのセッションヘルパーがあり、そのうちの1つはあなたが望むことをします。ドキュメントから:

Is my session equal to 4?: {{$.Session.equals 'mySession' 4}}

5
Nick Budden

isCurrentUserTemplateを追加して、これを他のテンプレートに含めることができます。

{{> isCurrentUserTemplate}}
1
Andreas