node.js handlebars.js

node.js - ¿Cómo precompilo los parciales para handlebars.js?



(5)

Estoy usando handlebars.js y quiero comenzar a precompilar todo, pero parece que no puedo encontrar una manera de precompilar los parciales. La mayoría de mis plantillas son en realidad parciales. Intenté tratar mis plantillas como si fueran plantillas normales, pero luego llamarlas como parcial no funciona.

¿Hay alguna forma de precompilar parciales o, alternativamente, llamar a una plantilla desde dentro de otra plantilla?


Aún no estoy seguro de precompilar parciales, pero esta es la forma de llamar a una plantilla desde dentro de otra plantilla con ayuda de esta pregunta: ayudante de manillares para la composición de plantillas

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

http://jsfiddle.net/EBt8R/


Como se mencionó aquí en GitHub , se ha agregado una -p a la CLI de Handlebars.

Así que puedes usar el handlebars my_partial.handlebars -p -f output.js


Encontré un método aún mejor: precompile todos sus parciales como plantillas, luego, justo antes de usarlos en su código, agregue esta línea:

Handlebars.partials = Handlebars.templates;

Las mejoras son: 1) es más corto y 2) no pierde ningún asistente personalizado que pueda pasar al llamar a la plantilla principal.


Estoy utilizando HandleBars v3.0.3 y tengo plantillas parciales y no parciales precompiladas en un archivo.

Este hilo es un poco confuso, así que estoy resumiendo la solución de trabajo.

  • No utilice el operador -p durante la precompilación.
  • No registre la plantilla parcial por Handlebars.registerPartial (''myPartial'', ''{{name}}'');
  • use la sugerencia de Nathan de asignar objetos parciales a objetos de plantillas por Handlebars.partials = Handlebars.templates;
  • Referir plantilla parcial por nombre {{> nombre}}

Logré que funcionara compilando previamente todos mis parciales como plantillas y luego adaptando la solución Nathans

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

Así que para mí, Handlebars.templates convirtió en JST cuando compilé cosas, lo noté en mi archivo de plantillas compiladas.