Handlebars.jsを使用していて、すべてのプリコンパイルを開始したいのですが、パーシャルをプリコンパイルする方法が見つからないようです。私のテンプレートの大部分は実際には部分的です。それらを通常のテンプレートのように扱ってみましたが、パーシャルとして呼び出すことはできません。
パーシャルをプリコンパイルする方法、または別のテンプレート内から1つのテンプレートを呼び出す方法はありますか?
さらに優れた方法を見つけました。すべてのパーシャルをテンプレートとしてプリコンパイルし、コードで使用する直前に、次の行を追加します。
Handlebars.partials = Handlebars.templates;
改善点は、1)短く、2)親テンプレートを呼び出すときに渡す可能性のあるカスタムヘルパーが失われないことです。
前述のように ここではGitHub 、ハンドルバーCLIに-p
フラグが追加されました。
したがって、handlebars my_partial.handlebars -p -f output.js
を使用できます
HandleBars v3.0.3を使用していますが、1つのファイルに部分的および部分的ではないテンプレートがプリコンパイルされています。
このスレッドは少し混乱しているので、作業ソリューションを要約しています。
パーシャルのプリコンパイルについてはまだわかりませんが、この質問の助けを借りて、別のテンプレート内から1つのテンプレートを呼び出す方法は次のとおりです。 テンプレート構成のハンドルバーヘルパー
// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function(templateName,context){
return new Handlebars.SafeString(Handlebars.templates[templateName](this));
});
すべてのパーシャルをテンプレートとして事前にコンパイルし、Nathansソリューションを適応させることで、なんとか機能させることができました。
// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function (templateName) {
return new Handlebars.SafeString(JST[templateName](this));
});
だから私にとってはHandlebars.templates
はJST
になりました。コンパイルすると、コンパイルしたテンプレートファイルで気づきました。
for(let [name, template] of Object.entries(handlebars.partials)) {
handlebars.partials[name] = handlebars.compile(template);
}
登録されているすべてのパーシャルを置き換える代わりに、パーシャルを明示的に追加して、次のようにフィルタリングすることをお勧めします。
Object.entries(Handlebars.templates).forEach(([k, v]) => { if ( k.indexOf('partial') != -1 ) Handlebars.partials[k] = v })
この場合、名前に「partial」を含むプリコンパイル済みテンプレートのみを挿入します。これにより、これらをpartials/
サブフォルダーに保存するか、some-partial.hbs
などの名前で保存できます。