Handlebars.js:如何访问每个嵌套的父索引?

如何访问每个循环中的父@index值?

试过以下几点:

{{#each company}} {{#each employee}} {{../@index}} // how to access company index here? {{/each}} {{/each}} 

这导致了一个错误:

期待'ID',得到'DATA'

这个例子中有一个语法错误。 正确的语法是{{@../index}}

我们正在研究如何在未来的语言版本中支持这些参数的自定义命名,以便于处理。 https://github.com/wycats/handlebars.js/issues/907

这对我工作:

 {{#each company}} {{setIndex @index}} {{#each employee}} {{../index}} {{/each}} {{/each}} 

JS:

 Handlebars.registerHelper('setIndex', function(value){ this.index = Number(value + 1); //I needed human readable index, not zero based }); 

只要确保company对象没有index属性。

答: {{@../index}}

从Handlebars文档 (请参阅每个“帮助程序”部分的底部):

“嵌套的each块可以通过释放的path访问互动variables,例如,可以使用{{@../index}}来访问父索引。

注意:我正在使用v1.3,所以至less已经这么老了。

提醒:助手是你最后的最佳select。 9/10有一个更好的解决scheme。

它看起来像Ember v2.2.0中有一个新的语法。 我在这里尝试了所有的答案,他们不适合我。

我发现工作是命名父循环的索引和子循环的索引。

 {{#each parents as |parent parentIndex|}} {{parentIndex}} {{#each children as |child childIndex|}} {{parentIndex}} {{childIndex}} {{/each}} {{/each}} 

注册帮手方法:

 Handlebars.registerHelper('eachWithIndex', function(cursor, options) { var fn = options.fn, inverse = options.inverse; var ret = ""; var idx = -1; //console.log(cursor); cursor.forEach(function(item){ idx++; console.log(item.index); item.index = idx; ret+=fn(item); }); return ret; }); 

车把模板:

 {{#eachWithIndex outer}} {{#each inner}} {{../index}} // access outer index like this. I used hanlebars V1.3.0 {{index}} // access inner index {{/each}} {{/eachWithIndex}}