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

Geo*_*hov 27 handlebars.js meteor

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

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


Templates.myTemplate2.isCurrentUser = function() {
  return Session.get("isCurrentUser");
};
Run Code Online (Sandbox Code Playgroud)

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

有没有办法避免一遍又一遍地写同一个函数?谢谢

jtb*_*lin 46

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

Template.registerHelper('session',function(input){
    return Session.get(input);
});
Run Code Online (Sandbox Code Playgroud)

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

{{session "isCurrentUser"}}
Run Code Online (Sandbox Code Playgroud)

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

{{#if currentUser}}
    ...
{{/if}}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,这是一个有趣的方法 (2认同)

cio*_*ddi 28

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

if (Meteor.isClient) {

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

}
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢提示,`Handlebars.registerHelper`方法当然是添加全局使用的模板元素的好地方. (3认同)
  • 注册帮助者的`Handlebars`方法在`0.8.0`中被弃用.`UI.registerHelper`是执行此操作的新方法. (2认同)

mjk*_*fer 12

只是向大家介绍:随着0.8.0的发布,Handlebars.registerHelper已经被弃用了.使用新的Blaze引擎,UI.registerHelper将是实现这一目标的新方法.

@cioddi代码的更新版本

UI.registerHelper('isCurrentUser',function(input){
  return Session.get("isCurrentUser");
});
Run Code Online (Sandbox Code Playgroud)


Geo*_*nos 5

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

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

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


Nic*_*den 5

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

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

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