handlebars.js を使用していて、すべてのプリコンパイルを開始したいのですが、パーシャルをプリコンパイルする方法が見つからないようです。私のテンプレートの大部分は、実際にはパーシャルです。それらを通常のテンプレートのように扱ってみましたが、部分的なものとして呼び出すことはできません。
パーシャルをプリコンパイルする方法、または別のテンプレートから 1 つのテンプレートを呼び出す方法はありますか?
handlebars.js を使用していて、すべてのプリコンパイルを開始したいのですが、パーシャルをプリコンパイルする方法が見つからないようです。私のテンプレートの大部分は、実際にはパーシャルです。それらを通常のテンプレートのように扱ってみましたが、部分的なものとして呼び出すことはできません。
パーシャルをプリコンパイルする方法、または別のテンプレートから 1 つのテンプレートを呼び出す方法はありますか?
さらに良い方法を見つけました。すべてのパーシャルをテンプレートとしてプリコンパイルし、コードでそれらを使用する直前に、次の行を追加します。
Handlebars.partials = Handlebars.templates;
改善点は、1) 短くなったこと、2) 親テンプレートを呼び出すときに渡す可能性のあるカスタム ヘルパーが失われないことです。
ここでGitHubで説明したよう-p
に、ハンドルバーCLIにフラグが追加されています。
だからあなたは使うことができますhandlebars my_partial.handlebars -p -f output.js
パーシャルのプリコンパイルについてはまだわかりませんが、これは、この質問の助けを借りて、別のテンプレート内から 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
物事をコンパイルしたとき、コンパイルされたテンプレートファイルで気づきました。
登録されたすべてのパーシャルを置き換える代わりに、パーシャルを明示的に追加し、次のようにフィルタリングすることをお勧めします。
Object.entries(Handlebars.templates).forEach(([k, v]) => { if ( k.indexOf('partial') != -1 ) Handlebars.partials[k] = v })
この場合、名前に「partial」を含むプリコンパイル済みテンプレートのみを挿入します。これにより、これらをpartials/
サブフォルダーに保存するか、次のような名前で保存できますsome-partial.hbs