Handlebars.js: Asignar variables en plantilla

Creado en 29 mar. 2013  ·  11Comentarios  ·  Fuente: handlebars-lang/handlebars.js

¿Es posible asignar una variable dentro de una plantilla y usarla como variables desde el exterior?

Ejemplo:
Quiero generar una tabla, pero 1 columna es opcional, depende de los datos (fields[].field2) existen o no.

En cada fila no hay problema para verificar, pero ¿cómo verificar el encabezado?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

Por el momento, uso una función auxiliar inestable "asignar" que crea ayudantes.

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

Pero esa no es una buena solución y no puedo usarla en #if.

Comentario más útil

:+1:

@kpdecker Podemos tener bucles, declaraciones if y otras construcciones lógicas en plantillas. ¿Pero aparentemente asignar una variable es _demasiada_ lógica en las plantillas? Realmente no entiendo el razonamiento detrás de esa decisión cuando los otros ayudantes predeterminados contienen mucha más lógica que simplemente tener la capacidad de asignar una variable.

Todos 11 comentarios

Esto va en contra de la premisa de plantillas sin lógica y no creo que esto deba ser una construcción a nivel de lenguaje.

Creo que el enfoque recomendado aquí sería calcular estos datos en su lógica de creación de contexto y pasarlos a la plantilla. Esto permite mucho más control ya que tiene a su disposición el lenguaje javascript completo en lugar de cualquier subconjunto implementado en el lenguaje de la plantilla.

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

Creo que esta sería una buena función, no para introducir más lógica en la plantilla, sino para pasar variables que son específicas de esa plantilla.

Por ejemplo, 2 de mis plantillas usan el mismo parcial. Me gustaría poder pasar algunas variables a ese parcial desde el nivel de la plantilla para que se generen cosas diferentes para la plantilla diferente dentro del alcance del parcial.

+1

+1

:+1:

:+1:

@kpdecker Podemos tener bucles, declaraciones if y otras construcciones lógicas en plantillas. ¿Pero aparentemente asignar una variable es _demasiada_ lógica en las plantillas? Realmente no entiendo el razonamiento detrás de esa decisión cuando los otros ayudantes predeterminados contienen mucha más lógica que simplemente tener la capacidad de asignar una variable.

+1

+1

+1

+1

Algo similar a esto puede implementarse usando parámetros de bloque y está documentado aquí:
http://handlebarsjs.com/block_helpers.html#block -params

Dado que esto se hace en un espacio de nombres separado fuera del contexto actual, proporciona un comportamiento más consistente sobre la asignación de contexto.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

nknapp picture nknapp  ·  3Comentarios

morgondag picture morgondag  ·  5Comentarios

ShintaroOkuda picture ShintaroOkuda  ·  7Comentarios

janus-reith picture janus-reith  ·  3Comentarios

rizen picture rizen  ·  6Comentarios