Доступ к переменной вне области действия каждого цикла Handlebars.js


188

У меня есть шаблон handlebars.js, вот так:

{{externalValue}}

<select name="test">
    {{#each myCollection}}
       <option value="{{id}}">{{title}} {{externalValue}}</option>
    {{/each}}
</select>

И это сгенерированный вывод:

myExternalValue

<select name="test">
       <option value="1">First element </option>
       <option value="2">Second element </option>
       <option value="3">Third element </option>
</select>

Как и ожидалось, я могу получить доступ к полям idи titleкаждого элемента, myCollectionчтобы сгенерировать мой выбор. И вне выбора моя externalValueпеременная правильно напечатана ("myExternalValue").

К сожалению, в текстах опций externalValueзначение никогда не распечатывается.

Мой вопрос: как я могу получить доступ к переменной вне области действия handlebars.js из цикла?

Ответы:


454

Пытаться

<option value="{{id}}">{{title}} {{../externalValue}}</option>

../Сегмент пути ссылается на шаблон рамки родительской , которые должны быть то , что вы хотите.


10
Если у будущих читателей все еще есть проблемы, как у меня, посмотрите комментарий к этому ответу здесь. Мне понадобилось некоторое время после того, как я увидел этот ответ, чтобы увидеть его. Возможно, вам придется использовать ../повторно, в зависимости от того, сколько областей от значения вы находитесь.
bcmcfc

10
Я сумасшедший или такой тип ценной информации нигде нет на документах руля ???
Джесси

1
@spliter будет работать на руле с тлеющим углем ... кажется, что он не работает
kweku360

1
Понятия не имею @ kweku360. Это работает для обычных хадлебаров. Возможно, Ember использует настроенную версию руля, где эта функциональность реализована другим способом
сплиттер

1
Спасибо, чувак, это прекрасно работает и с Foundation 6 Panini.
Марко

13

Или вы можете использовать абсолютный путь следующим образом:

<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>

1

Я видел много ссылок с 404 для документации по этой теме.

Я обновляю его этим, он работает с 1 апреля 2020 года :

https://handlebarsjs.com/guide/expressions.html#path-expressions

Некоторые помощники, такие как #with и #each, позволяют вам погружаться во вложенные объекты. Когда вы включите ../ сегменты в свой путь, Handlebars вернутся в родительский контекст.

    {{#each people}}
    {{../prefix}} {{firstname}} 
    {{/each}}

Даже если имя напечатано в контексте комментария, оно все равно может вернуться к основному контексту (корневому объекту), чтобы получить префикс.

ПРЕДУПРЕЖДЕНИЕ

Точное значение, к которому ../ будет разрешено, зависит от помощника, вызывающего блок. Использование ../ необходимо только при изменении контекста. Детям помощников, таким как {{#each}}, потребуется использование ../, а детям помощников, таким как {{#if}} - нет.

{{permalink}}
{{#each comments}}
  {{../permalink}}

  {{#if title}}
    {{../permalink}}
  {{/if}}
{{/each}}

В этом примере все вышеприведенные ссылки ссылаются на одно и то же значение префикса, даже если они расположены в разных блоках. Это поведение является новым с Handlebars 4, заметки о выпуске обсуждают предыдущее поведение, а также план миграции.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.