Considérez les données simplifiées suivantes:
var viewData = {
itemSize: 20,
items: [
'Zimbabwe', 'dog', 'falafel'
]
};
Et un modèle de guidon:
{{#each items}}
<div style="font-size:{{itemSize}}px">{{this}}</div>
{{/each}}
Cela ne fonctionnera pas car, dans la boucle each
, la portée parente n'est pas accessible - du moins, d'aucune façon que j'ai essayée. J'espère qu'il y a un moyen de faire ça!
Il existe deux manières valables d'y parvenir.
../
En ajoutant ../
au nom de la propriété, vous pouvez référencer la portée parent.
{{#each items}}
<div style="font-size:{{../itemSize}}px">{{this}}</div>
{{#if this.items.someKey}}
<div style="font-size:{{../../itemSize}}px">{{this}}</div>
{{/if}}
{{/each}}
Vous pouvez monter à plusieurs niveaux en répétant le ../
. Par exemple, pour monter de deux niveaux, utilisez ../../key
.
Pour plus d'informations, voir le documentation du guidon sur les chemins .
@root
En ajoutant le préfixe @root
au chemin de la propriété, vous pouvez naviguer de haut en bas (comme indiqué dans réponse de caballerog ).
Pour plus d'informations, voir Documentation du guidon sur les variables @data .
La nouvelle méthode utilise la notation par points, la notation par barre oblique est obsolète ( http://handlebarsjs.com/expressions.html ).
Ainsi, la méthode d'accès aux éléments parents est la suivante:
@root.grandfather.father.element
@root.father.element
Dans votre exemple spécifique, vous utiliseriez:
{{#each items}}
<div style="font-size:{{@root.viewData.itemSize}}px">{{this}}</div>
{{/each}}
Une autre méthode de la documentation officielle ( http://handlebarsjs.com/builtin_helpers.html ) utilise un alias
Chaque assistant prend également en charge les paramètres de bloc, permettant des références nommées n'importe où dans le bloc.
{{#each array as |value key|}} {{#each child as |childValue childKey|}} {{key}} - {{childKey}}. {{childValue}} {{/each}} {{/each}}
Crée une clé et une variable de valeur auxquelles les enfants peuvent accéder sans avoir besoin de références de variable approfondies. Dans l'exemple ci-dessus, {{key}}> est identique à {{@ ../key}} mais, dans de nombreux cas, est plus lisible.