私のようなヘルパーがいます
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();
}
});
別のヘルパーにアクセスするより良い方法はありますか?
私は誤ってこれをコンソールで発見しました:
Template.registerHelper
function (name, func) {
Blaze._globalHelpers[name] = func;
}
そう、 Blaze._globalHelpers
は私たちが探しているものです!
テンプレートヘルパーを呼び出すことができます(outluchの答えにあるグローバルヘルパーではありません)。
Template.tplName.__helpers.get('helper').call()
MDGは、通常の関数を使用して、それをヘルパーやイベントなどに渡すことを推奨しています。 こちら を参照してください。
更新16.06.16
実際には、単に manuel:viewmodel を使用することを強くお勧めします。これにより、Blazeの頭痛の多くが緩和されます...
他のヘルパーからヘルパーを呼び出す方法を探していたところ、Meteor 1.0は他のすべてのヘルパーが使用できる「Template.registeredHelpers」を定義していることがわかりました。 https://docs.meteor.com/#/full/template_registerhelper
Template.registerHelper("checkedIf",function(value){
return value?"checked":"";
});
そのようなヘルパーを呼び出す必要さえないかもしれません。 currentUserヘルパーはすでに組み込まれています。
http://docs.meteor.com/#template_currentuser
{{currentUser}}
多分これはあなたのために働くでしょう:
//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}}