31

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

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

4

7 に答える 7

54

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

Handlebars.partials = Handlebars.templates;

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

于 2012-08-27T19:48:08.143 に答える
6

ここでGitHubで説明したよう-pに、ハンドルバーCLIにフラグが追加されています。

だからあなたは使うことができますhandlebars my_partial.handlebars -p -f output.js

于 2013-03-23T16:55:52.323 に答える
5

パーシャルのプリコンパイルについてはまだわかりませんが、これは、この質問の助けを借りて、別のテンプレート内から 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/

于 2012-08-18T01:06:23.557 に答える
0

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

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

だから、私Handlebars.templatesJST物事をコンパイルしたとき、コンパイルされたテンプレートファイルで気づきました。

于 2014-02-11T23:31:05.377 に答える
0

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

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

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

于 2019-10-01T03:12:00.350 に答える