Meteor, how to access to a helper from another helper?
I have a helper like
Template.user_profile.helpers({
user:function() {
return Meteor.users.find({'profile.front_name':Session.get('slug')}).fetch()[0];
}
});
I want to add a helper to the collection which could access the user
helper and compare its _id
with the current user _id
, to tell whether the user is visiting its own profile.
I'm using something pretty ugly:
Template.user_profile._tmpl_data.helpers.user()
The final code:
Template.user_profile.helpers({
user:function() {
return Meteor.users.find({'profile.front_name':Session.get('userId')}).fetch()[0];
},
isCurrentUser: function() {
return Template.user_profile._tmpl_data.helpers.user()._id === Meteor.userId();
}
});
Is there any better way to access another helper?
I've just accidentally discovered this in the console:
Template.registerHelper
function (name, func) {
Blaze._globalHelpers[name] = func;
}
So, Blaze._globalHelpers
is what we are looking for!
You can call a template helper (not global helper - which is in outluch's answer) with:
Template.tplName.__helpers.get('helper').call()
MDG suggests using a regular function and then passing it to helpers, events and so on. See here.
Update 16.06.16
Actually I strongly advise to simply use manuel:viewmodel - it alleviates so many Blaze headaches...
As I was searching for a way to call a helper from another helper, I found that Meteor 1.0 defines "Template.registeredHelpers" that are available for all other helpers to use. https://docs.meteor.com/#/full/template_registerhelper
Template.registerHelper("checkedIf",function(value){
return value?"checked":"";
});