Ik gebruik stuur voor sjablonen in mijn project. Is er een manier om de index van de huidige iteratie van een “elke” helper in Handlebars te krijgen?
<tbody>
{{#each item}}
<tr>
<td><!--HOW TO GET ARRAY INDEX HERE?--></td>
<td>{{this.key}}</td>
<td>{{this.value}}</td>
</tr>
{{/each}}
</tbody>
Antwoord 1, autoriteit 100%
In de nieuwere versies van Handlebars wordt de index (of sleutel in het geval van objectiteratie) standaard geleverd met de standaard van elke helper.
fragment van: https://github.com/wycats/handlebars .js/issues/250#issuecomment-9514811
De index van het huidige array-item is al enige tijd beschikbaar via @index:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Gebruik in plaats daarvan @key voor objectiteratie:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Antwoord 2, autoriteit 3%
Dit is veranderd in de nieuwere versies van Ember.
Voor arrays:
{{#each array}}
{{_view.contentIndex}}: {{this}}
{{/each}}
Het lijkt erop dat het #each-blok niet langer werkt op objecten. Mijn suggestie is om je eigen helperfunctie ervoor te gebruiken.
Bedankt voor deze tip.
Antwoord 3, autoriteit 3%
Vanaf stuurversie 3.0,
{{#each users as |user userId|}}
Id: {{userId}} Name: {{user.name}}
{{/each}}
In dit specifieke voorbeeld heeft de gebruiker dezelfde waarde als de huidige context en heeft userId de indexwaarde voor de iteratie.
Raadpleeg – http://handlebarsjs.com/block_helpers.htmlin het gedeelte Blokhelpers
Antwoord 4, autoriteit 3%
Ik weet dat dit te laat is. Maar ik heb dit probleem opgelost met de volgende code:
Java-script:
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}}
als u uw index met 1 wilt beginnen, moet u de volgende code gebruiken:
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}}
Bedankt.
Antwoord 5
Arrays:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Als je arrays met objecten hebt… kun je de onderliggende items doorlopen:
{{#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}}
Objecten:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Als je geneste objecten hebt, heb je toegang tot de key
van het bovenliggende object met
{{@../key}}
Antwoord 6
Loop in hbs een beetje ingewikkeld gebruiken
<tbody>
{{#each item}}
<tr>
<td><!--HOW TO GET ARRAY INDEX HERE?--></td>
<td>{{@index}}</td>
<td>{{this}}</td>
</tr>
{{/each}}
</tbody>
Antwoord 7
Vanaf stuurversie 4.0,
{{#list array}}
{{@index}}
{{/list}}