web-dev-qa-db-ja.com

handlebars.jsのパーシャルをプリコンパイルするにはどうすればよいですか?

Handlebars.jsを使用していて、すべてのプリコンパイルを開始したいのですが、パーシャルをプリコンパイルする方法が見つからないようです。私のテンプレートの大部分は実際には部分的です。それらを通常のテンプレートのように扱ってみましたが、パーシャルとして呼び出すことはできません。

パーシャルをプリコンパイルする方法、または別のテンプレート内から1つのテンプレートを呼び出す方法はありますか?

30
Nathan Friedly

さらに優れた方法を見つけました。すべてのパーシャルをテンプレートとしてプリコンパイルし、コードで使用する直前に、次の行を追加します。

Handlebars.partials = Handlebars.templates;

改善点は、1)短く、2)親テンプレートを呼び出すときに渡す可能性のあるカスタムヘルパーが失われないことです。

50
Nathan Friedly

前述のように ここではGitHub 、ハンドルバーCLIに-pフラグが追加されました。

したがって、handlebars my_partial.handlebars -p -f output.jsを使用できます

6
moollaza

HandleBars v3.0.3を使用していますが、1つのファイルに部分的および部分的ではないテンプレートがプリコンパイルされています。

このスレッドは少し混乱しているので、作業ソリューションを要約しています。

  • 事前コンパイル中は-p演算子を使用しないでください。
  • Handlebars.registerPartial( 'myPartial'、 '{{name}}');によって部分的なテンプレートを登録しないでください。
  • handlebars.partials = Handlebars.templates;によって、部分オブジェクトをテンプレートオブジェクトにマッピングするというNathanの提案を使用します。
  • 部分的なテンプレートを名前で参照する{{>名前}}
5
Yawar

パーシャルのプリコンパイルについてはまだわかりませんが、この質問の助けを借りて、別のテンプレート内から1つのテンプレートを呼び出す方法は次のとおりです。 テンプレート構成のハンドルバーヘルパー

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function(templateName,context){
    return new Handlebars.SafeString(Handlebars.templates[templateName](this));
});

http://jsfiddle.net/EBt8R/

3
Nathan Friedly

すべてのパーシャルをテンプレートとして事前にコンパイルし、Nathansソリューションを適応させることで、なんとか機能させることができました。

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function (templateName) {
    return new Handlebars.SafeString(JST[templateName](this));
});

だから私にとってはHandlebars.templatesJSTになりました。コンパイルすると、コンパイルしたテンプレートファイルで気づきました。

0
lee penkman
for(let [name, template] of Object.entries(handlebars.partials)) {
    handlebars.partials[name] = handlebars.compile(template);
}
0
user2275915

登録されているすべてのパーシャルを置き換える代わりに、パーシャルを明示的に追加して、次のようにフィルタリングすることをお勧めします。

Object.entries(Handlebars.templates).forEach(([k, v]) => { if ( k.indexOf('partial') != -1 ) Handlebars.partials[k] = v })

この場合、名前に「partial」を含むプリコンパイル済みテンプレートのみを挿入します。これにより、これらをpartials/サブフォルダーに保存するか、some-partial.hbsなどの名前で保存できます。

0
Dwight Brown