javascript - handlebars - npm hbs
Handlebars.js usando../ para hacer referencia al contexto principal (1)
Digamos que tengo la siguiente plantilla JSON y handlebars.js:
JSON
{
rootPath: ''/some/path/'',
items:[ {
title: ''Hello World'',
href: ''hello-world''
}, {
title: ''About'',
href: ''about''
}, {
title: ''Latest News'',
href: ''latest-news''
}
}
Modelo
<script id="test-template" type="text/x-handlebars-template">
<ul class="nav">
{{#each items}}
<li><a href="{{../rootPath}}{{href}}">{{title}}</a></li>
{{/each}}
</ul>
</script>
La plantilla de arriba funciona, hasta que quiero filtrar elementos. Digamos que tenemos 2 listas una impar y la otra par, aquí hay una plantilla simple para impar:
<script id="test-template" type="text/x-handlebars-template">
<ul class="nav">
{{#each items}}
{{#isOdd @index}}
<li><a href="{{../rootPath}}{{href}}">{{title}}</a></li>
{{/isOdd}}
{{/each}}
</ul>
</script>
Y el ayudante registrado:
// isOdd, helper to identify Odd items
Handlebars.registerHelper(''isOdd'', function (rawValue, options) {
if (+rawValue % 2) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
Los ayudantes funcionan como se esperaba y solo se representan los elementos impares; sin embargo, la referencia al contexto principal se pierde, por lo que la directiva {{../rootPath}}
~~ no puede representar ~~ representa un valor vacío.
¿Hay alguna manera de pasar el contexto principal a través del bloqueo de ayuda?
Modificar
<a href="{{../rootPath}}{{href}}"> to this:
<a href="{{../../rootPath}}{{href}}">
¿Por qué? porque la instrucción if está en un contexto interno, por lo que primero debe subir un nivel y es por eso que debe agregar ../
Ver más detalles en: https://github.com/wycats/handlebars.js/issues/196