2012-08-03 17 views
9

¿Es posible utilizar variables globales en condicionales de manillar? Estoy escribiendo una aplicación que enumera una gran cantidad de objetos, y quiero que los usuarios puedan controlar qué detalles se enumeran. Por ejemplo, mostrar sólo los primeros nombres en una lista de personas, así:Variables globales en manubrios si los bloques

<ul> 
{{#each people}} 
    <li> 
     <p>{{firstName}}</p> 
     {{#if displayLastnames}} 
     <p>{{lastName}}</p> 
     {{/if}} 
    </li> 
{{/each}} 
</ul> 

no quiero modificar realmente los datos (por ejemplo, eliminando el atributo lastName y haciendo {{#if lastName}}).

Respuesta

15

También puede registrar un ayudante global llamada 'displayLastnames' y utilizarlo en un caso:

Handlebars.registerHelper('displayLastnames', function(block) { 
    return displayLastnames; //just return global variable value 
    }); 

y sólo lo utilizan como en su muestra:

{{#if displayLastnames}} 
    <p>{{lastName}}</p> 
    {{/if}} 
+0

[Ejemplo] (http://jsfiddle.net/Y34b4/5/). Me gusta este método mejor ¡Gracias! –

+0

no funciona para Handlebars 2.0.0 –

+0

incluso no funciona para 1.0.0, '[Error] TypeError: undefined no es un objeto (evaluando 'depth0.global_var')', este violín solo funciona para 1.0.0.beta6 ! –

7

El manillar del espacio de nombres de las variables para que no pueda acceder directamente a las variables globales. Probablemente la cosa más fácil de hacer es añadir su ayudante, algo tan simple como esto:

Handlebars.registerHelper('if_displayLastnames', function(block) { 
    if(displayLastnames) 
     return block.fn(this); 
    else 
     return block.inverse(this); 
}); 

y luego en su plantilla:

{{#if_displayLastnames}} 
<p>{{lastName}}</p> 
{{/if_displayLastnames}} 

Probablemente usted quiere poner sus variables "globales" en su propio espacio de nombres, por supuesto.

Demostración: http://jsfiddle.net/ambiguous/Y34b4/