Подтвердить что ты не робот

Метеор, как получить доступ к помощнику от другого помощника?

У меня есть помощник, например

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();
  }
});

Есть ли лучший способ доступа к другому помощнику?

4b9b3361

Ответ 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}}