J'utilise des guidons pour la création de modèles dans mon projet. Existe-t-il un moyen d’obtenir l’index de l’itération actuelle d’un "chaque" assistant dans le guidon?
<tbody>
{{#each item}}
<tr>
<td><!--HOW TO GET ARRAY INDEX HERE?--></td>
<td>{{this.key}}</td>
<td>{{this.value}}</td>
</tr>
{{/each}}
</tbody>
Dans les nouvelles versions de Handlebars, l'index (ou la clé dans le cas d'une itération d'objet) est fourni par défaut avec le standard de chaque aide.
extrait de: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811
L'index de l'élément de tableau actuel est disponible depuis un certain temps via @index:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Pour l'itération d'objet, utilisez plutôt @key:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Cela a changé dans les nouvelles versions d'Ember.
Pour les tableaux:
{{#each array}}
{{_view.contentIndex}}: {{this}}
{{/each}}
Il semble que le bloc #each ne fonctionne plus sur les objets. Ma suggestion est de lancer votre propre fonction d'assistance pour cela.
Merci pour cela astuce .
À partir de la version 3.0 du guidon,
{{#each users as |user userId|}}
Id: {{userId}} Name: {{user.name}}
{{/each}}
Dans cet exemple particulier, l'utilisateur aura la même valeur que le contexte actuel et userId aura la valeur d'index pour l'itération. Référez-vous - http://handlebarsjs.com/block_helpers.html dans la section des aides de bloc
Je sais que c'est trop tard. Mais j'ai résolu ce problème avec le code suivant:
Script Java:
Handlebars.registerHelper('eachData', function(context, options) {
var fn = options.fn, inverse = options.inverse, ctx;
var ret = "";
if(context && context.length > 0) {
for(var i=0, j=context.length; i<j; i++) {
ctx = Object.create(context[i]);
ctx.index = i;
ret = ret + fn(ctx);
}
} else {
ret = inverse(this);
}
return ret;
});
HTML:
{{#eachData items}}
{{index}} // You got here start with 0 index
{{/eachData}}
si vous voulez commencer votre index avec 1, vous devriez faire le code suivant:
Javascript:
Handlebars.registerHelper('eachData', function(context, options) {
var fn = options.fn, inverse = options.inverse, ctx;
var ret = "";
if(context && context.length > 0) {
for(var i=0, j=context.length; i<j; i++) {
ctx = Object.create(context[i]);
ctx.index = i;
ret = ret + fn(ctx);
}
} else {
ret = inverse(this);
}
return ret;
});
Handlebars.registerHelper("math", function(lvalue, operator, rvalue, options) {
lvalue = parseFloat(lvalue);
rvalue = parseFloat(rvalue);
return {
"+": lvalue + rvalue
}[operator];
});
HTML:
{{#eachData items}}
{{math index "+" 1}} // You got here start with 1 index
{{/eachData}}
Merci.
Tableaux:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Si vous avez des tableaux d'objets ... vous pouvez parcourir les enfants:
{{#each array}}
//each this = { key: value, key: value, ...}
{{#each this}}
//each key=@key and value=this of child object
{{@key}}: {{this}}
//Or get index number of parent array looping
{{@../index}}
{{/each}}
{{/each}}
Objets:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Si vous avez des objets imbriqués, vous pouvez accéder à la key
de l'objet parent avec {{@../key}}