次のようなことをしたいのですが-
Handlebars.registerHelper('include', function(path, options) {
return Handlebars.renderPartial(path, context, hash); //this is a js interface which matches the hbs partial interface
});
これが必要な主な理由は、ヘルパー構文で使用したいパーシャルがいくつかあることです。 私のヘルパーは部分的な機能を拡張することもできます。 たとえば、ブロックコンテンツを取得し、それをvarとして部分テンプレートにコンテキストvarとして渡すことができます。
ヘルパー内の任意の文字列をコンパイルおよびレンダリングできます。 したがって、すでにHandlebars.registerPartial('my-partial', 'my partial content')
を使用してパーシャルを追加している場合は、これを行うことができます...
Handlebars.registerHelper('include', function (path, options) {
var partial = Handlebars.partials[path];
if (typeof partial !== 'function') {
partial = Handlebars.compile(partial);
}
return partial(context); // build up the context some how
});
次に、 {{include 'my-partial'}}
のようなハンドルバーで使用します。
ありがとう@doowb
Handlebars.compileはhandlebars-runtime内で機能しますか?
ハッシュパラメータを渡す方法がまだ必要です
ハンドルバーランタイムは、 compile
メソッドを明示的に省略します。 パーシャルへの呼び出しでそれらを渡すことにより、独自のハッシュパラメータを渡すことができます。
これは機能のリクエストではなく、数日間アクティビティがなかったため、これを閉じます。
閉鎖的で古いことは知っていますが、答えや例はありません。 私はこれを行っていますが、私が試した単純なケースではうまくいくようです。複雑なケースは試していません。
<!-- compiled as Handlebars.template.displayName -->
{#each this}}
Hello {{#if isMale}}Mr.{{else}}Mrs.{{/if}} {{renderPartial nameRenderer this}}
{{/each}}
Handlebars.registerPartial("capital", "{{captialize firstname}} {{captialize middleName}} {{captialize lastname}}");
Handlebars.registerPartial("midinit", "{{upper firstname}} {{upper middleName}} {{upper lastname}}");
Handlebars.registerPartial("midinit", "{{firstname}} {{firstChar middleName}} {{lastname}}");
Handlebars.registerHelper('renderPartial', function(partial, context) {
return Handlebars.compile(Handlebars.partials[partial])(context);
});
Handlebars.registerHelper('firstChar', function(name) {
return name.substring(0,1);
});
Handlebars.registerHelper('upper', function(name) {
return name.toUpperCase();
});
Handlebars.registerHelper('captialize', function(name) {
return name.substring(0,1).toUpperCase() + name.substring(1);
});
var data = [{
isMale: true,
firstname: "david",
middleName: "tom",
lastname: "henry",
nameRenderer: "capital"
}, {
isMale: true,
firstname: "david",
middleName: "tom",
lastname: "henry",
nameRenderer: "midinit"
}, {
isMale: false,
firstname: "nancy",
middleName: "tracey",
lastname: "henry",
nameRenderer: "uppercased"
}];
Handlebars.template.displayName(data);
/* returns
Hello Mr. David Tom Henry
Hello Mr. david t henry
Hello Mrs. NANCY TRACEY HENRY
*/
最も参考になるコメント
ヘルパー内の任意の文字列をコンパイルおよびレンダリングできます。 したがって、すでに
Handlebars.registerPartial('my-partial', 'my partial content')
を使用してパーシャルを追加している場合は、これを行うことができます...次に、
{{include 'my-partial'}}
のようなハンドルバーで使用します。