javascript - last - if not handlebars js
¿Cómo obtener índice en los manillares de cada ayudante? (5)
Arrays:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Si tienes matrices de objetos ... puedes iterar a través de los niños:
{{#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}}
Objetos:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Si tiene objetos anidados, puede acceder a la key
del objeto principal con {{@../key}}
Estoy usando manillares para plantillas en mi proyecto. ¿Hay alguna manera de obtener el índice de la iteración actual de un ayudante "cada" en Handlebars?
<tbody>
{{#each item}}
<tr>
<td><!--HOW TO GET ARRAY INDEX HERE?--></td>
<td>{{this.key}}</td>
<td>{{this.value}}</td>
</tr>
{{/each}}
</tbody>
En la versión 3.0 del manillar en adelante,
{{#each users as |user userId|}}
Id: {{userId}} Name: {{user.name}}
{{/each}}
En este ejemplo en particular, el usuario tendrá el mismo valor que el contexto actual y userId tendrá el valor de índice para la iteración. Consulte: http://handlebarsjs.com/block_helpers.html en la sección de ayudantes de bloque
En las versiones más recientes de Handlebars, el índice (o la clave en el caso de la iteración del objeto) se proporciona de forma predeterminada con el estándar para cada ayudante.
fragmento de: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811
El índice del elemento de la matriz actual ha estado disponible desde hace algún tiempo a través de @index:
{{#each array}}
{{@index}}: {{this}}
{{/each}}
Para la iteración de objetos, use @key en su lugar:
{{#each object}}
{{@key}}: {{this}}
{{/each}}
Esto ha cambiado en las nuevas versiones de Ember.
Para matrices:
{{#each array}}
{{_view.contentIndex}}: {{this}}
{{/each}}
Parece que el bloque #each ya no funciona en los objetos. Mi sugerencia es rodar su propia función de ayuda para ello.
Gracias por este tip .
Sé que esto es demasiado tarde. Pero resolví este problema con el siguiente Código:
Script de 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 quieres comenzar tu índice con 1 debes hacer el siguiente código:
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}}
Gracias.