我有一个像
这样的帮手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();
}
});
有没有更好的方法来访问另一个帮手?
答案 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)
答案 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}}