web-dev-qa-db-ja.com

流星、別のヘルパーからヘルパーにアクセスする方法は?

私のようなヘルパーがいます

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

別のヘルパーにアクセスするより良い方法はありますか?

49
Jonathan de M.

私は誤ってこれをコンソールで発見しました:

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

そう、 Blaze._globalHelpersは私たちが探しているものです!

33
outluch

テンプレートヘルパーを呼び出すことができます(outluchの答えにあるグローバルヘルパーではありません)。

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

MDGは、通常の関数を使用して、それをヘルパーやイベントなどに渡すことを推奨しています。 こちら を参照してください。

更新16.06.16
実際には、単に manuel:viewmodel を使用することを強くお勧めします。これにより、Blazeの頭痛の多くが緩和されます...

11
avalanche1

他のヘルパーからヘルパーを呼び出す方法を探していたところ、Meteor 1.0は他のすべてのヘルパーが使用できる「Template.registeredHelpers」を定義していることがわかりました。 https://docs.meteor.com/#/full/template_registerhelper

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

そのようなヘルパーを呼び出す必要さえないかもしれません。 currentUserヘルパーはすでに組み込まれています。

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

{{currentUser}}
2
Brian Bolton

多分これはあなたのために働くでしょう:

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