在我的Meteor应用中,我发现自己写了很多东西:
Templates.myTemplate1.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
Templates.myTemplate2.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
我需要许多不同的模板(我使用把手)来访问存储在Session中的相同简单值。
有没有办法避免一遍又一遍地写同一个功能? 感谢
答案 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包的全局..
答案 4 :(得分:5)
你想看一下流星的这些车把助手:https://github.com/raix/Meteor-handlebar-helpers
有许多会话助手,一个可以满足您的需求。来自文档:
Is my session equal to 4?: {{$.Session.equals 'mySession' 4}}
答案 5 :(得分:1)
您可以添加isCurrentUserTemplate
并使用
{{> isCurrentUserTemplate}}