Метеор, как получить доступ к помощнику от другого помощника?
У меня есть помощник, например
Template.user_profile.helpers({
user:function() {
return Meteor.users.find({'profile.front_name':Session.get('slug')}).fetch()[0];
}
});
Я хочу добавить помощника в коллекцию, который мог бы получить доступ к помощнику user
и сравнить его _id
с текущим пользователем _id
, чтобы узнать, посещает ли пользователь свой собственный профиль.
Я использую что-то довольно уродливое:
Template.user_profile._tmpl_data.helpers.user()
Конечный код:
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();
}
});
Есть ли лучший способ доступа к другому помощнику?
Ответы
Ответ 1
Я случайно обнаружил это на консоли:
Template.registerHelper
function (name, func) {
Blaze._globalHelpers[name] = func;
}
Итак, Blaze._globalHelpers
- это то, что мы ищем!
Ответ 2
Вы можете вызвать помощник шаблона (а не глобальный помощник, который находится в большом ответе):
Template.tplName.__helpers.get('helper').call()
ЦРТ предлагает использовать регулярную функцию, а затем передавать ее помощникам, событиям и т.д. См. здесь.
Обновление 16.06.16
На самом деле я настоятельно рекомендую просто использовать manuel: viewmodel - он снимает так много головных болей Blaze...
Ответ 3
Поскольку я искал способ вызова помощника из другого помощника, я обнаружил, что Meteor 1.0 определяет "Template.registeredHelpers", которые доступны для всех других помощников. https://docs.meteor.com/#/full/template_registerhelper
Template.registerHelper("checkedIf",function(value){
return value?"checked":"";
});
Ответ 4
Возможно, вам даже не понадобится вызвать помощника. Существует уже встроенный помощник current.ser.
http://docs.meteor.com/#template_currentuser
{{currentUser}}
Ответ 5
возможно, это сработает для вас:
//js
Template.foo.helpers({ bar: function() {
return this.userId == Meteor.userId(); },
domain: function() {
var a = document.createElement('a'); a.href = this.url;
return a.hostname;
} });
ownsDocument = function(userId, doc) { return doc && doc.userId === userId;}
Posts = new Meteor.Collection('posts');
Posts.allow({
update: ownsDocument, remove: ownsDocument
});
//html
{{#if bar}}<a href="{{pathFor 'postEdit'}}">Edit</a>{{/if}}