Existe-t-il une méthode intégrée pour accéder au contexte racine dans un modèle Handlebars.js? La plupart des helpers ajoutent un contexte imbriqué et vous devez écrire ../ avant la variable dans ce contexte pour y accéder, mais n'est pas très pratique si vous avez beaucoup de chacun, si, etc.
Utilisez @root. Ceci est dans le guidon-v2.0.0.js
{{@root.somthing.nested_somthing}}
il n’est pas possible d’accéder au contexte racine du modèle une fois que vous avez changé le contexte avec boucle (par exemple, chacun) plus d’infos
Cependant, il est possible d'accéder au contexte précédent avec '../'
# app/assets/javascript/contents.coffee
body = HandlebarsTemplates['my_hbs_template']({
view:{
registryName: 'foo',
data: {items: {x: 'x'}}
}
})
modèle:
<!-- app/assets/javascript/templates/my_content.hbs -->
<table class="table">
<tbody>
{{#each view.data.items}}
<tr>
<td>{{@key}}</td>
<td>
Hello from {{../view.registryName}}
</td>
</tr>
{{/each}}
</tbody>
</table>
vérifiez http://handlebarsjs.com/#paths pour plus d'informations
Oui, j'en ai créé un. http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot
En gros, ajoutez cet assistant et le bingo {{xRoot}} vous mènera au sommet ...
Je passe toujours mes données JSON au guidon comme ceci:
{ data: self.data }
ainsi le code ci-dessous retourne toujours "data" quand il voit la balise xRoot et m'emmène au sommet
Handlebars.JavaScriptCompiler.prototype.nameLookup = function (parent, name, type) {
if (name.indexOf("xRoot") === 0) {
return "data";
}
if (/^[0-9]+$/.test(name)) {
return parent + "[" + name + "]";
} else if (Handlebars.JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
return parent + "." + name;
}
else {
return parent + "['" + name + "']";
}
};
Pas encore!
Il a été suggéré plusieurs fois et il existe un billet ouvert: https://github.com/wycats/handlebars.js/issues/392
Leur argument est que ce n'est pas obligatoire, mais s'il s'agit d'un correctif bon marché sans surcoût de performance discernable, je ne vois pas pourquoi il ne pourrait pas être inclus.