26

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

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


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

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

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

4

6 回答 6

46

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

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

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

{{session "isCurrentUser"}}

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

{{#if currentUser}}
    ...
{{/if}}
于 2012-10-27T23:57:21.933 回答
27

由于流星目前使用把手作为默认模板引擎,您可以为它定义一个帮助器,例如:

if (Meteor.isClient) {

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

}

您可以在一个名为 helpers.js 的新文件中执行此操作,以保持 app.js 文件更干净。注册此助手后,您可以通过插入在任何模板中使用它{{isCurrentUser}}

于 2012-10-25T09:19:23.267 回答
12

提醒大家:随着 0.8.0 的发布,Handlebars.registerHelper已被弃用。使用新的 Blaze 引擎UI.registerHelper将是实现这一目标的新方法。

@cioddi 代码的更新版本

UI.registerHelper('isCurrentUser',function(input){
  return Session.get("isCurrentUser");
});
于 2014-03-31T23:10:58.197 回答
5

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

它是 account/auth 包中包含的全局变量。

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

于 2013-03-09T08:39:27.657 回答
5

您需要查看这些流星的车把助手:https ://github.com/raix/Meteor-handlebar-helpers

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

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

于 2014-05-15T15:00:04.560 回答
1

您可以添加一个isCurrentUserTemplate并将其包含在您的其他模板中

{{> isCurrentUserTemplate}}
于 2012-10-25T08:24:38.583 回答