2012-03-13 17 views
15

Estoy tratando de escribir un helper condicional if para Handlebars.js. Esencialmente, quiero poner una clase "activa" en un enlace si es la página Apply Now.Ayuda condicional de "if statement" para Handlebars.js

Ayudante:

Handlebars.registerHelper('isApplyNow', function(block) { 
    if(this.title == "Apply Now") { 
     return block(this); 
    } else { 
     return block.inverse(this); 
    } 
    }); 

Y Plantilla:

<ul> 
    {{#each pages}} 
     <li> 
     {{#isApplyNow}} 
      <a href="{{url}}" class ='active'>{{this.title}}</a> 
     {{else}} 
      <a href="{{url}}">{{this.title}}</a> 
     {{/if}} 
     </li> 
    {{/each}} 
    </ul> 

Pero, me estoy haciendo un muy escueto Error de JavaScript:

Uncaught [object Object] in handlebars-1.0.0.beta.2.js:595 

Puede alguien ver si estoy escribiendo esto incorrectamente?

Gracias!

artículos referenciados:

Calling Helper Within If Block in Handlebars Template

http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/

Respuesta

20

veo un error de sintaxis menor que creo que podría ser el problema. Si vas a usar un helper que toma un bloque, entonces debes cerrarlo con el nombre del ayudante. Ver cómo he reemplazado su {{/if}} con {{/isApplyNow}}, así:

{{#isApplyNow}} 
     <a href="{{url}}" class ='active'>{{this.title}}</a> 
    {{else}} 
     <a href="{{url}}">{{this.title}}</a> 
    {{/isApplyNow}} 
+0

Ahh duh, intentaré esto un poco cuando regrese a ese lado de la aplicación. ¡Gracias! – wart

+0

Eso es todo! Gracias kaptron. – wart

1

NOTA: bloque (este) en el ayudante no funcionará más. En su lugar, use block.fn (esto)

por ej.

Handlebars.registerHelper('isApplyNow', function(block) { 
    if (this.title === "Apply Now") 
     return block.fn(this); 
    else 
     return block.inverse(this); 
});