Handlebars.js: ¿Es posible renderizar un parcial desde dentro de un ayudante personalizado?

Creado en 10 jul. 2015  ·  4Comentarios  ·  Fuente: handlebars-lang/handlebars.js

Me gustaría hacer algo como lo siguiente:

Handlebars.registerHelper('include', function(path, options) {
  return Handlebars.renderPartial(path, context, hash); //this is a js interface which matches the hbs partial interface
});

mi razón principal para querer esto es que tengo algunos parciales que me gustaría usar con la sintaxis auxiliar. mi ayudante también podría extender la funcionalidad parcial. por ejemplo, podría tomar el contenido del bloque y pasarlo como una variable a la plantilla parcial como una variable de contexto.

Comentario más útil

Puede compilar y representar cualquier cadena dentro del ayudante. Entonces, si ya ha agregado sus parciales con Handlebars.registerPartial('my-partial', 'my partial content') , puede hacer esto...

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
});

Luego úsalo en manubrios como {{include 'my-partial'}} .

Todos 4 comentarios

Puede compilar y representar cualquier cadena dentro del ayudante. Entonces, si ya ha agregado sus parciales con Handlebars.registerPartial('my-partial', 'my partial content') , puede hacer esto...

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
});

Luego úsalo en manubrios como {{include 'my-partial'}} .

gracias @doowb

¿Handlebars.compile funciona dentro de handlebars-runtime?

Todavía necesitaría una forma de pasar parámetros hash

El tiempo de ejecución de Handlebars omite explícitamente el método compile . Puede pasar sus propios parámetros hash pasándolos en la llamada a parcial.

Cierro esto porque no es un pero de solicitud de función y no ha habido actividad durante algunos días.

Sé que es cerrado y viejo, pero no tiene una respuesta o un ejemplo. Estoy haciendo esto y parece funcionar para los casos simples que he probado, no he probado casos complejos.

<!-- 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
*/
¿Fue útil esta página
0 / 5 - 0 calificaciones