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

Fdr*_*Fdr 46 javascript handlebars.js

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

尝试以下方法:

{{#each company}}
{{#each employee}}
  {{../@index}} // how to access company index here?
{{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

这导致错误:

期待'身份',获得'数据'

Kev*_*ker 76

示例中存在语法错误.正确的语法是{{@../index}}.

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

  • 大!这也适用于“ {{@ .. / key}}” (2认同)

str*_*rah 26

这对我有用:

{{#each company}}
{{setIndex @index}}
{{#each employee}}
  {{../index}}
{{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

JS:

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

只需确保该company对象没有index属性.


jor*_*anb 8

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

Handlebars文档中(参见'each'帮助部分的底部):

"嵌套each块可以通过depted路径访问交互变量.例如,{{@../index}}可以使用访问父索引."

注意:我正在使用v1.3,所以它至少是那么久了.

提醒:助手是您最后的最佳选择.9/10有一个更好的解决方案.


小智 5

看起来 Ember v2.2.0 中有一个新语法。我在这里尝试了所有答案,但它们对我不起作用。

我发现有效的是命名父循环的索引和子循环的索引。

{{#each parents as |parent parentIndex|}}
    {{parentIndex}}
    {{#each children as |child childIndex|}}
        {{parentIndex}}
        {{childIndex}}
    {{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)