2013-06-21 9 views
47

私はuserヘルパーにアクセスし、ユーザーが自身のプロフィールを訪問しているかどうかを伝えるために、現在のユーザー_idとその_idを比較することができ、コレクションにヘルパーを追加したい流星、別のヘルパーからヘルパーにアクセスするには?

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

のようなヘルパーを持っています。 私はかなり醜いものを使用しています:

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

ありますか?

答えて

2

あなたはそのようなヘルパーを呼び出す必要はないかもしれません。すでに構築されたCurrentUserにヘルパーはあり

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

{{currentUser}} 
+0

私は、ユーザーが訪問しているプロファイルは、自身であるかどうかを確認したいです。 –

+0

質問ではありませんでした... – SsouLlesS

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}} 
+0

(ユーザーが自分自身を訪問したかどうかを確認するために>最初の部分とhtml)、次に編集を許可する場合、2番目の部分 – GeriTol

4

私は別のヘルパーからヘルパーを呼び出す方法を探していたとして、私はMeteor 1.0が "Template.registeredHelpers"を定義していることを知りました。他のすべてのヘルパーが使用できるようになっています。 https://docs.meteor.com/#/full/template_registerhelper

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

私は別のヘルパーでTemplate.registerHelperを使用しようとしました.jsファイルはすべてのそのようなヘルパーを保持していますが、別のテンプレートイベントで呼び出そうとすると、それは役に立ちません。そのようなヘルパーはイベントで呼び出すことができますか? Template.registerHelper( "checkedIf"、function(value){ 戻り値? "checked": ""; }); Template.myform.events({ "submit .js-save-element:function(event){ コンソール。log( 'ヘルパーを呼び出す:' + checkedIf( 'teststring')); } }); ' ここで私は 'ReferenceError:checkedIf is not defined。'というエラーが表示されます。 – Jay

+0

ねえ、ここではヘルパーとは混乱していると思います。ヘルパーは、テンプレート(つまり、Blazeを使用する場合は.htmlファイル)から呼び出される機能です。イベント(テンプレートから出てくる情報を処理する)からヘルパー(テンプレートに情報を送る)にアクセスすることはできません。 Blaze._globalHelpers ['checkedIf']()を呼び出すことができますが、文書化されていない/内部機能であるため、将来のリリースではサポートされない可能性があります。 テンプレートシステム(グローバルまたはファイルスコープ)を使って、必要な場所から呼び出すだけですか? –

+0

実際に私はその古い学校のようなことをやってしまいました。私のutils.jsでは、グローバルスコープ関数を定義しました。私はヘルパーとイベントの両方でそれを呼び出すことができます。私はどのようにして流星のように見ていましたか(とにかく)あなたの説明のためにとにかく感謝します – Jay

32

私はちょうど偶然コンソールでこれを発見した:

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

ので、Blaze._globalHelpersは、我々が探しているものです!

+1

ファンタスティック! 。 – foobarbecue

+0

最後に、すべてのGoogleの結果の中で本当の答えが見つかりました。ありがとうございました! –

10

あなたは(グローバルいないヘルパー - outluchの答えである)テンプレートヘルパーを呼び出すことができて:

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

MDGはこれに通常の関数を使用して、その後、ヘルパーに渡し、イベントと示唆しています。 hereを参照してください。更新16.06.16

は、実際に私は強く、単にmanuel:viewmodelを使用するように助言する - それは非常に多くのブレイズの頭痛を軽減...

関連する問題