2013-02-13 67 views

回答

59

有一个在示例的语法错误。正确的语法是{{@../index}}

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

+1

标记正确的答案虽然有帮助,但这是问题的正确答案。 – 2014-11-19 00:53:16

+0

哦看起来像这是第一个实际的答案,我的不好 – 2016-01-29 02:07:52

+1

这不适用于烬v2.2.0。 @安德鲁玩具有正确的答案。 – 2016-02-08 21:10:22

26

这为我工作:

{{#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属性。

+1

可悲的是这似乎不一样,如果内循环从模板渲染工作:''{{>我的模板}}''产量''无法读取undefined''的特性“指数”。你知道这个解决方案吗? – Lincoln 2013-04-24 12:09:17

+1

@Lincoln你可以尝试这里的建议http://stackoverflow.com/a/18026063/271442 - 我去了包括帮助者的方法。 – mynameistechno 2014-01-29 16:33:40

+0

这是一个了不起的伎俩。我将分享一个jsfiddle链接。谢谢! – 2014-05-09 17:42:36

0

registe一个Helper方法:

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}} 
7

答案:{{@../index}}

Handlebars docs(见 '各自' 助手部的底部):

“嵌套each块可以经由depted路径访问互为作用变量要访问。父索引,例如,可以使用{{@../index}}。“

注意:我使用的是v1.3,因此它至少已经过时了。

提示:助手是你最后的最佳选择。 9/10有一个更好的解决方案。

+0

这是实际的答案 – 2016-01-29 02:07:10

+0

{{@key}}是否也支持旧版本? – ajayv 2017-01-11 20:31:26

3

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

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

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