Meteor Templates可以直接访问Session变量吗?

时间:2012-10-25 02:08:49

标签: meteor handlebars.js

在我的Meteor应用中,我发现自己写了很多东西:

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


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

我需要许多不同的模板(我使用把手)来访问存储在Session中的相同简单值。

有没有办法避免一遍又一遍地写同一个功能? 感谢

6 个答案:

答案 0 :(得分:46)

建立在@cioddi的答案上,因为您可以将参数传递给Handlebars助手,您可以将其作为通用函数,以便您可以轻松地动态检索任何值,例如:

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

然后您可以在模板中调用它

{{session "isCurrentUser"}}

请注意,auth packages附带一个名为CurrentUser的全局帮助程序,您可以使用它来检测用户是否已登录:

{{#if currentUser}}
    ...
{{/if}}

答案 1 :(得分:28)

由于meteor目前使用把手作为默认的模板引擎,你可以为它定义一个帮手:

if (Meteor.isClient) {

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

}

您可以在新文件中执行此操作,例如调用helpers.js以保持app.js文件更清晰。 注册此帮助程序后,您可以通过插入{{isCurrentUser}}

在任何模板中使用它

答案 2 :(得分:12)

最重要的是:随着0.8.0的发布,Handlebars.registerHelper已被弃用。使用新的Blaze引擎,UI.registerHelper将是实现此目标的新方法。

@cioddi代码

的更新版本
UI.registerHelper('isCurrentUser',function(input){
  return Session.get("isCurrentUser");
});

答案 3 :(得分:5)

实际上现在你可以使用{{#if currentUser}}

这是来自accounts / auth包的全局..

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

答案 4 :(得分:5)

你想看一下流星的这些车把助手:https://github.com/raix/Meteor-handlebar-helpers

有许多会话助手,一个可以满足您的需求。来自文档:

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

答案 5 :(得分:1)

您可以添加isCurrentUserTemplate并使用

将其包含在其他模板中
{{> isCurrentUserTemplate}}