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)
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}