Handlebars.js: é possível renderizar uma parcial de dentro de um auxiliar personalizado?

Criado em 10 jul. 2015  ·  4Comentários  ·  Fonte: handlebars-lang/handlebars.js

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.

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 ...

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'}} .

Todos 4 comentários

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
*/
Esta página foi útil?
0 / 5 - 0 avaliações