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で:

    定義されたグローバルtempele.functionA=function(...){
         戻る ...
    }

HTMLで:

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

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

これはできますか?問題を明確に説明したいと思います。

4

3 に答える 3

14

ヘルパーをハンドルバーに直接登録できます。これは、現在のユーザーの電子メールアドレスを表示するために使用しているものです。

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

どのテンプレートでも、私は単にと呼びます{{currentUserName}}。あなたにとってそれは

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

ちなみに、それをどのように使いたいかを見ると、Meteorの考えが間違っているかもしれません。Meteorはデータ駆動型です-フロー駆動型のパラダイムを強制しようとしないでください。テンプレートに一部のデータが欠落している場合は、テンプレートにデータをフェッチするだけでなく、データソースを変更する必要があります。

于 2013-03-11T12:26:25.143 に答える
13

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

したがって、この質問の場合、正しいコード形式は次のようになります。

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

次に、次の2つの方法で、任意のテンプレートでこのテンプレートヘルパーを参照できます。

    {{getNodesById '1'}}

また

    {{#each getNodesById '1'}}
      ...
    {{/each}}
于 2015-03-04T07:08:03.760 に答える
3

Meteor 0.8以降の場合、を使用UI.registerHelperすると機能します。

于 2014-11-23T17:04:00.090 に答える