2013-03-11 11 views
10

多くのテンプレートで同じ機能を使用したいと思いますが、すべてのテンプレートで定義する必要があります。グローバルテンプレートヘルパー機能を定義するにはどうすればよいですか?

function getNodesById(id){ 
    return collection.find({sid:id}).fetch(); 
} 

Template.navigation.getNodesById= function(id){ 
    return getNodesById(id); 
} 

Template.body.getNodesById= function(id){ 
    return getNodesById(id); 
} 

HTML::このような

<Template name="navigation"> 
... 
{{#each getNodesById '1'}} 
... 
{{/each}} 
... 
</Template> 
<Template name="body"> 
... 
{{#each getNodesById '1'}} 
... 
{{/each}} 
... 
</Template> 
... 
<Template name="..."> 
..... 
</Template> 

ではなく、テンプレートのglobleテンプレート関数を定義したことができます任意の方法はありますか?ちょうどそれのように:JavaScriptで :HTMLで

 
    defined global tempele.functionA = function(...){ 
     return ... 
    } 

<Template name ="a"> 
    {{#each functionA ...}} 
    {{/each }} 
</Template> 

<Template name ="b"> 
    {{#each functionA ...}} 
    {{/each }} 
</Template> 
<Template name="..."> 
    {{ #.. functionA ...}} 
     .... 
    {{/...}} 
</Template > 

が、私はこれを行うことができますか?問題をはっきりと記述して欲しい。

答えて

14

ヘルパーをハンドルバーに直接登録することができます。私はちょうど{{currentUserName}}呼び出す任意のテンプレートで

Handlebars.registerHelper('currentUserName', function() { 
    var user = Meteor.user(); 
    if (_.isUndefined(user) || _.isNull(user)) { 
     return new Handlebars.SafeString("<i class='icon-spin icon-spinner'></i> Login"); 
    } 
    return user.emails[0].address; 
}); 

:これは私が現在のユーザーのメールアドレスを表示するために使用していますものです。あなたのためには

Handlebars.registerHelper('getNodeById', function (id) { 
    return collection.find({sid:id}).fetch(); 
}); 

補足:どのように使用したいのかを見て、あなたはメテオルが間違っていると思ったかもしれません。メテオはデータ駆動型です。フロー駆動のパラダイムを強制しようとしないでください。テンプレートにデータが不足している場合は、テンプレートでデータソースをフェッチするだけでなく、データソースを変更する必要があります。

+0

あなたの思い出させるためのおかげで、私は私がstart.Meteorで間違っていたと思うのデータ駆動型ですが、私はKEEますそれを心に留めてください。ありがとう! –

3

流星0.8以上の場合は、UI.registerHelperを使用してください。

13

Meteor 1.0以降、ドキュメントhereは、グローバルに利用可能なテンプレートヘルパーを定義するために、Template.registerHelperを使用するように開発者に指示します。

だから、この質問の場合には、正しいコードの形式は、このようになります:

Template.registerHelper("getNodesById", function(id) { 
     return collection.find({sid: id}); 
    } 

あなたは、その後、次の二つの方法であなたのテンプレートのいずれかでこのテンプレートヘルパーを参照することができます:

{{getNodesById '1'}} 

または

{{#each getNodesById '1'}} 
     ... 
    {{/each}} 
関連する問題