Eu gostaria de fazer algo como o seguinte -
Handlebars.registerHelper('include', function(path, options) {
return Handlebars.renderPartial(path, context, hash); //this is a js interface which matches the hbs partial interface
});
minha principal razão para querer isso é que eu tenho alguns parciais que gostaria de usar com a sintaxe auxiliar. meu ajudante também pode estender a funcionalidade parcial. por exemplo, ele pode pegar o conteúdo do bloco e passá-lo como uma var para o modelo parcial como uma var de contexto.
Você pode compilar e renderizar qualquer string dentro do auxiliar. Então, se você já adicionou seus parciais com Handlebars.registerPartial('my-partial', 'my partial content')
, você pode fazer isso ...
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
});
Em seguida, use-o em guidões como {{include 'my-partial'}}
.
obrigado @doowb
o Handlebars.compile funciona dentro do handlebars-runtime?
eu ainda precisaria de uma maneira de passar parâmetros de hash
O tempo de execução do Handlebars omite explicitamente o método compile
. Você pode passar seus próprios parâmetros de hash passando-os na chamada para partial.
Fechando isso, pois não é um pedido de recurso, mas não há atividade há alguns dias.
Eu sei que é fechado e antigo, mas não tem uma resposta ou exemplo. Estou fazendo isso e parece funcionar para os casos simples que tentei - não tentei casos complexos.
<!-- 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
*/
Comentários muito úteis
Você pode compilar e renderizar qualquer string dentro do auxiliar. Então, se você já adicionou seus parciais com
Handlebars.registerPartial('my-partial', 'my partial content')
, você pode fazer isso ...Em seguida, use-o em guidões como
{{include 'my-partial'}}
.