Как получить именованную переменную цикла в ractive.js?

В Python итерация дает мне именованную переменную:

for cage in cages:
    for animal in cage.animals:
        print("The current cage is",cage)
        print("the current animal is",animal)

В шаблонах Ractive я не могу этого сделать.

{{#cages}}
    {{#animals}}
         The current animal is {{.}} or {{this}},
         but I don't know how to refer to the current cage,
         i.e. the outer loop variable

         I would like to be able to say {{cage}} has an {{animal}}
    {{/animals}}
{{/cages}}

Есть ли синтаксис, о котором я не знаю?


person trvrm    schedule 22.07.2015    source источник


Ответы (2)


Я задавался вопросом, следует ли нам добавить синтаксис {{#each cage in cages}} или {{#each cages as cage}} для обработки подобных случаев. Вместо этого ответ mknecht полностью верен, и я часто использую это сам; альтернативой является создание ссылки на индекс следующим образом:

{{#each cages :c}}
  {{#each animals}}
    The current animal is {{this}}, the current cage
    is {{cages[c]}}
  {{/each}}
{{/each}}

Разница с этим методом заключается в том, что двусторонняя привязка по-прежнему будет работать (хотя в данном случае это не похоже на проблему).

person Rich Harris    schedule 22.07.2015
comment
Я бы очень хотел увидеть {{#each cage in cages}} или {{#each cages as cage}}, которые значительно упростили бы написание вложенных циклов. - person trvrm; 22.07.2015

Нет явного синтаксиса, afaik, но вы можете (неправильно) использовать для этого псевдонимы: Вы создаете новый контекст, который, например, переименовывает . в cage. Это выглядело бы так:

{{#cages}} {{# {cage: .} }}
  {{ cage.name }}
{{/}}{{/cages}}

Полная версия находится на JSFiddle.

Неправильно использовать, потому что в Ractive вы обычно работаете над свойствами текущего объекта контекста, не называя сам объект контекста. Это отлично работает и во вложенном случае. Следовательно, для этого нет синтаксиса.

Где псевдонимы имеют смысл: затенение имен. Если вам нужно получить доступ к свойству клетки с тем же именем, что и у свойства животного во внутреннем цикле, тогда в игру вступают псевдонимы. Оба продемонстрированы на другой скрипке

person mknecht    schedule 22.07.2015