Meteor,如何从另一个助手访问助手?

时间:2013-06-21 06:52:20

标签: javascript meteor handlebars.js

我有一个像

这样的帮手
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();
  }
});

有没有更好的方法来访问另一个帮手?

5 个答案:

答案 0 :(得分:33)

我在控制台中偶然发现了这个:

Template.registerHelper
function (name, func) {                                                                             
  Blaze._globalHelpers[name] = func;                                                                                   
} 

所以,Blaze._globalHelpers正是我们所寻找的!

答案 1 :(得分:11)

您可以通过以下方式调用模板帮助程序(不是全局帮助程序 - 这是一个不错的答案)

Template.tplName.__helpers.get('helper').call()

MDG建议使用常规函数,然后将其传递给助手,事件等。请参阅here

更新16.06.16
实际上我强烈建议简单地使用manuel:viewmodel - 它可以缓解许多Blaze的头痛......

答案 2 :(得分:4)

当我正在寻找一种从另一个助手调用帮助器的方法时,我发现Meteor 1.0定义了“Template.registeredHelpers”,可供所有其他助手使用。 https://docs.meteor.com/#/full/template_registerhelper

Template.registerHelper("checkedIf",function(value){
  return value?"checked":"";
});

答案 3 :(得分:2)

您甚至可能不需要像这样调用帮助器。已经内置了currentUser助手。

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

{{currentUser}}

答案 4 :(得分:0)

也许这对你有用:

  //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}}