Подтвердить что ты не робот

Handlebars.js: Как получить доступ к родительскому индексу в каждом вложенном?

Как получить доступ к значению parent @index в каждом цикле?

Пробовал следующее:

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

Это приводит к ошибке:

Ожидая 'ID', получил 'DATA'

4b9b3361

Ответ 1

В примере есть синтаксическая ошибка. Правильный синтаксис {{@../index}}.

Мы изучаем способы поддержки пользовательских имен этих параметров в будущих версиях языка, чтобы это было легче справиться. https://github.com/wycats/handlebars.js/issues/907

Ответ 2

Это сработало для меня:

{{#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.

Ответ 3

Ответ: {{@../index}}

Из Handlebars docs (см. нижнюю часть раздела "каждый" ):

"Вложенные блоки each могут получить доступ к переменным взаимодействия через децитированные пути. Для доступа к родительскому индексу, например, можно использовать {{@../index}}.

ПРИМЕЧАНИЕ. Я использую v1.3, поэтому, по крайней мере, этот старый.

НАПОМИНАНИЕ: Помощники - ваш последний лучший вариант. 9/10 есть лучшее решение.

Ответ 4

Похоже на новый синтаксис в Ember v2.2.0. Я попробовал все ответы здесь, и они не работали для меня.

То, что я нашел работало, - это именовать индекс родительского цикла и индекс дочернего цикла.

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

Ответ 5

зарегистрировать метод Помощника:

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