values not hbs handlebars example javascript handlebars.js client-templates

javascript - not - Llamando al ayudante dentro de la plantilla de Bloque en manillares



if not handlebars js (4)

Con la última versión (1.0.rc.1) de Handlebars, tienes que escribir algo como:

Handlebars.registerHelper(''ifItemSelected'', function(item, options) { var selected = false; // lots of logic that determines if item is selected if (selected) { return options.fn(this); } });

es decir. bloque (este) es reemplazado por options.fn (este)

http://handlebarsjs.com/block_helpers.html#conditionals

Estoy trabajando con el motor de plantillas Handlebars.js y estoy tratando de encontrar una manera de hacer algo como esto (ejemplo artificial):

{{#if itemSelected "SomeItem"}} <div>This was selected</div> {{/if}

donde itemSelected es un ayudante registrado como este:

Handlebars.registerHelper("itemSelected", function(item) { var selected = false; // Lots of logic that determines if item is selected return selected; });

Recibo errores al intentar usar esta sintaxis para la plantilla, y no puedo encontrar ningún ejemplo que muestre este tipo de cosas. Veo simples bloques #if como este ...

{{#if myValueInContext}} <div>This will show if myValueInContext results in a truthy value.</div> {{/if}}

Pero, no puedo averiguar cómo abordar el primer ejemplo. Tal vez me estoy acercando a este mal.

Por cierto, etiqueté este bigote porque no pude agregar una etiqueta de manillar a la pregunta.


Debe agregar paréntesis alrededor de la invocación del ayudante incrustado:

{{#if (itemSelected "SomeItem")}} <div>This was selected</div> {{/if}

Hice experimentos y verifiqué que simplemente funciona.

No estoy seguro de si se menciona en la documentación de los manillares. Aprendí el truco de los ejemplos de handlebars-layouts de handlebars-layouts .


No creo que esto vaya a funcionar. Si entiendo que la documentación del manillar es correcta, el #if es un ayudante de bloque registrado y no toma otro ayudante registrado como argumento.

De acuerdo a la documentación puedes implementarlo así.

Handlebars.registerHelper(''ifItemSelected'', function(item, block) { var selected = false; // lots of logic that determines if item is selected if(selected) { return block(this); } });

Después deberías poder llamarlo con

{{#ifItemSelected SomeItem}} This was selected {{/ifItemSelected}

pero tienes que asegurarte de que SomeItem tenga el formato adecuado. No veo una forma de usar un controlador registrado como condicional en una sentencia if.


Si también desea tener una opción más, necesitará este código:

Handlebars.registerHelper(''ifItemSelected'', function(item, options) { var selected = false; // lots of logic that determines if item is selected if (selected) { return options.fn(this); } else { return options.inverse(this); } });

Usado con:

{{#ifItemSelected SomeItem}} This was selected {{else}} This was not selected {{/ifItemSelected}