2017-08-12 5 views
1

は、私はいくつかのグローバルテンプレート(通常/ローカルテンプレートヘルパーのように)私はこの試みたヘルパー どのようにしてグローバルテンプレートヘルパーをMeteorにまとめることができますか?

Template.registerHelper("termSuffix",function(){}); 

Template.registerHelper("subjects",function(){}); 

Template.registerHelper("date",function(){}); 
... 

Template.registerHelper({ 
     termSuffix:function(){}, 
     subjects:function(){}, 
     date:function(){} 
}); 

を持っている。しかし、それはException from Tracker recompute function:Error: No such function: termSuffix

+0

私はそれが可能であるとは思わない。あなたはこれをしたいと思う魅力的な理由がありますか?これは、非グローバルテンプレートヘルパーと一貫性があってもいいですが、この構文はサポートされていません(少なくとも、ドキュメントに関する限り)。https://docs.meteor.com/v1.3.5/api /templates.html#Template-registerHelper – JeremyK

+0

私はあまりにも多くの 'Template.registerHelper'をアプリケーションに持っていて、あまりにも整頓されていないようです。 – Abk

答えて

1

この構文は、グローバルヘルパーのためにサポートされていませんがスローされます。 DocsCode

ライブラリに十分な変更があると思われる場合は、プルリクエストを送信できます。

一方、あなたがあなた自身でTemplate.registerHelper機能をラップすることができます:underscorejsでchainingなし

function registerGlobalHelpers(helpers){ 
    _.chain(helpers) 
    .each((fn, name) => { Template.registerHelper(name, fn); }) 
    .value(); 
    } 

または定義された:

function registerGlobalHelpers(helpers){ 
    _.each(helpers, (fn, name) => { Template.registerHelper(name, fn); }); 
    } 

次に、このようにそれを使用します。

registerGlobalHelpers({ 
     termSuffix:function(){}, 
     subjects:function(){}, 
     date:function(){} 
}) 
+0

清潔で、短くてエレガントです。ありがとう@JeremyK +1 – Abk

+1

これらのコマンドの大部分は過剰です。あなたは '_each(helpers、(fn、name)=> {Template.registerHelper(name、fn);});'を使うだけで十分でしょう。 – Styx

+0

@Styx、yes、 '.key()'は、iteratee関数を単純化するために削除できます。これを更新します。残りは優先事項です。チェーンコマンドの流暢なインターフェースアプローチが好きなので、一般的に.chain/.valueをアンダースコアで使用してください。確かに、それらの間に残っているのは1つだけ残っている場合、多くの価値を追加すれば議論の余地があります!私は答えに両方のオプションを追加します – JeremyK

関連する問題