Actualmente estoy tratando con handlebars.js en una aplicación express.js. Para mantener las cosas modulares, dividí todas mis plantillas en parciales.
Mi problema : no pude encontrar una manera de pasar variables a través de una invocación parcial. Digamos que tengo un parcial que se ve así:
<div id=myPartial>
<h1>Headline<h1>
<p>Lorem ipsum</p>
</div>
Supongamos que registré este parcial con el nombre 'myPartial'. En otra plantilla, puedo decir algo como:
<section>
{{> myPartial}}
</section>
Esto funciona bien, el parcial se representará como se esperaba y soy un desarrollador feliz. Pero lo que ahora necesito es una forma de pasar diferentes variables a través de esta invocación, para verificar dentro de un parcial, por ejemplo, si se da un título o no. Algo como:
<div id=myPartial>
{{#if headline}}
<h1>{{headline}}</h1>
{{/if}}
<p>Lorem Ipsum</p>
</div>
Y la invocación debería verse así:
<section>
{{> myPartial|'headline':'Headline'}}
</section>
más o menos.
Sé que puedo definir todos los datos que necesito antes de representar una plantilla. Pero necesito una forma de hacerlo como acabo de explicar. ¿Hay alguna manera posible?
fuente

this, podría pasar en su propio contexto. Por ejemplo, defina datos adicionales para transferir, como{new_variable: some_data}?{{> partialName {new_variable: some_data} }}key=value. ¿Hay algún problema que cubra esto en github?Por si acaso, esto es lo que hice para obtener argumentos parciales, más o menos. He creado un pequeño ayudante que toma un nombre parcial y un hash de parámetros que se pasarán al parcial:
La clave aquí es que los ayudantes de Handlebars aceptan un hash de argumentos similar a Ruby . En el código auxiliar vienen como parte del último argumento de la función
options- en suhashmiembro. De esta manera, puede recibir el primer argumento, el nombre parcial, y obtener los datos después de eso.Entonces, probablemente desee devolver un mensaje
Handlebars.SafeStringdel ayudante o usar "triple-stash"{{{- para evitar que se escape doblemente.Aquí hay un escenario de uso más o menos completo:
Espero que esto ayude a alguien. :)
fuente
Esto es muy posible si escribe su propio ayudante. Estamos utilizando un
$ayudante personalizado para lograr este tipo de interacción (y más):fuente
hbs.registerPartials(path.join(__dirname, '/views/partials'), function() { utils.precompileHandlebarsPartials(hbs); }); // Pre compile the partials precompileHandlebarsPartials : function(hbs) { var partials = hbs.handlebars.partials; for (var partial in partials) { if (typeof partials[partial] === 'string') { partials[partial] = hbs.handlebars.compile(partials[partial]); } }; }Esto también se puede hacer en versiones posteriores del manillar usando la
key=valuenotación:Permitiéndole pasar valores específicos a su contexto parcial.
Referencia: contexto diferente para el parcial # 182
fuente
La respuesta aceptada funciona muy bien si solo desea utilizar un contexto diferente en su parcial. Sin embargo, no le permite hacer referencia a ninguno de los contextos principales. Para pasar varios argumentos, debe escribir su propio ayudante. Aquí hay un asistente de trabajo para Manillares
2.0.0(la otra respuesta funciona para las versiones<2.0.0):Luego, en su plantilla, puede hacer algo como:
Y en su parcial, podrá acceder a esos valores como contexto como:
fuente
Parece que quieres hacer algo como esto:
Yehuda ya te dio una forma de hacerlo:
Pero para aclarar:
Para darle a su parcial sus propios datos, simplemente dele su propio modelo dentro del modelo existente, así:
En otras palabras, si este es el modelo que le está dando a su plantilla:
Luego agregue un nuevo objeto para ser dado al parcial:
childContextse convierte en el contexto de lo parcial como dijo Yehuda: en eso, solo ve el campoanother, pero no ve (o no le importa el camposome). Si teníaiden el modelo de nivel superior, y repiteidnuevamente en el childContext, eso funcionará bien ya que el parcial solo ve lo que hay dentrochildContext.fuente
Sí, llegué tarde, pero puedo agregar para los usuarios de Assemble : puede usar el
"parseJSON"ayudante integrado http://assemble.io/helpers/helpers-data.html . (Descubierto en https://github.com/assemble/assemble/issues/416 ).fuente
No estoy seguro de si esto es útil, pero aquí hay un ejemplo de plantilla de Manillar con parámetros dinámicos pasados a un RadioButtons parcial en línea y al cliente (navegador) que muestra los botones de radio en el contenedor.
Para mi uso, se representa con Handlebars en el servidor y permite que el cliente lo termine. Con ella, una herramienta de formularios puede proporcionar datos en línea dentro de Manillares sin ayudantes.
Nota: este ejemplo requiere jQuery
fuente