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

Jon*_* M. 49 javascript handlebars.js meteor

我有一个好帮手

Template.user_profile.helpers({
  user:function() {
     return Meteor.users.find({'profile.front_name':Session.get('slug')}).fetch()[0];
  }
});
Run Code Online (Sandbox Code Playgroud)

我想在集合中添加一个帮助程序,它可以访问user帮助程序并将其_id与当前用户进行比较_id,以判断用户是否正在访问自己的配置文件.我正在使用一些非常难看的东西:

Template.user_profile._tmpl_data.helpers.user()
Run Code Online (Sandbox Code Playgroud)

最终代码:

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();
  }
});
Run Code Online (Sandbox Code Playgroud)

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

out*_*uch 34

我刚刚在控制台中意外地发现了这个:

Template.registerHelper
function (name, func) {                                                                             
  Blaze._globalHelpers[name] = func;                                                                                   
} 
Run Code Online (Sandbox Code Playgroud)

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


ava*_*he1 11

您可以使用以下命令调用模板帮助程序(不是全局帮助程序 - 这是outluch的答案)

Template.tplName.__helpers.get('helper').call()
Run Code Online (Sandbox Code Playgroud)

MDG建议使用常规函数,然后将其传递给帮助程序,事件等.看到这里.

更新16.06.16
实际上我强烈建议简单地使用manuel:viewmodel - 它减轻了很多Blaze的头痛......


Bri*_*ton 2

您甚至可能不需要像那样打电话给助手。已经内置了一个 currentUser 帮助器。

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

{{currentUser}}
Run Code Online (Sandbox Code Playgroud)