Доступ до змінної за межами рамки 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
Дякую, людина, це чудово працює і з Фондом 6 Паніні.
Марко

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, дозволяють зануритися у вкладені об’єкти. Коли ви включите ../ сегменти у свій шлях, рулі повернуться в батьківський контекст.

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

Навіть незважаючи на те, що ім'я друкується під час коментаря, воно все одно може повернутися до основного контексту (root-об'єкта) для отримання префікса.

УВАГА

Точне значення, яке ../ визначатиме залежно від помічника, який викликає блок. Використання ../ необхідне лише при зміні контексту. Дітям помічників, таких як {{#each}}, потрібно буде використовувати ../, тоді як дітям помічників, таких як {{#if}} цього не потрібно.

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

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

У цьому прикладі всі вищезазначені посилання на одне і те ж значення префікса, навіть якщо вони розташовані в різних блоках. Така поведінка є новою, що стосується рулі 4, у примітках до випуску обговорюється попередня поведінка, а також план міграції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.