Як отримати доступ до елемента масиву доступу за індексом на панелі керування?


270

Я намагаюся вказати індекс елемента в масиві в межах шаблону рулі:

{
  people: [
    {"name":"Yehuda Katz"},
    {"name":"Luke"},
    {"name":"Naomi"}
  ]
}

використовуючи це:

<ul id="luke_should_be_here">
{{people[1].name}}
</ul>

Якщо вищезгадане неможливо, як я можу написати помічника, який міг би отримати доступ до певного елемента в масиві?

Відповіді:


409

Спробуйте це:

<ul id="luke_should_be_here">
{{people.1.name}}
</ul>

26
це ніде не зафіксовано! Дивовижно.
lukemh

25
Я отримую Expecting 'ID'помилку з {{user.links.websites.1}} або {{user.links.websites.0}}
Олів'є Лалонде

131
@OlivierLalonde, мені довелося використовувати щось подібне {{ websites.[0] }}.
Метт

4
Дійсно, @Matt, це не просто якийсь вдалий формат, а є своєрідним документованим синтаксисом. (Дивіться мою відповідь.)
Арджан

5
Що з останнім елементом масиву?
winduptoy

319

Далі, з додатковою крапкою перед індексом , працює так, як очікувалося. Тут квадратні дужки необов’язкові, коли за індексом слідує інша властивість:

{{people.[1].name}}
{{people.1.name}}

Однак квадратні дужки потрібні в:

{{#with people.[1]}}
  {{name}}
{{/with}}

В останньому, використовуючи число індексу без квадратних дужок, вийшло б одне:

Error: Parse error on line ...:
...     {{#with people.1}}                
-----------------------^
Expecting 'ID', got 'INTEGER'

Як осторонь: дужки використовуються (також) для синтаксису-буквального синтаксису для позначення фактичних ідентифікаторів (а не номерів індексів), які в іншому випадку були б недійсними. Детальніше в Що таке дійсний ідентифікатор?

(Протестовано ручками в YUI.)

2.xx Оновлення

Тепер ви можете використовувати getпомічник для цього:

(get people index)

хоча якщо ви отримаєте помилку щодо того, що індекс повинен бути рядком, зробіть:

(get people (concat index ""))

10
Це має бути відповіддю, оскільки воно є більш ретельним, ніж обрана відповідь. Якщо потрібні квадратні дужки, коли індекс знаходиться в кінці, я затримався на деякий час!
modulitos

це зробило трюк! дякую ... обрана відповідь вище цього не зробила, будь ласка, позначте це як правильне.
MarioAraya

1
{{#with people.1}}Рішення працює для мене, використовуючи com.github.jknack:handlebars:4.1.2.
Ферран Мейлінч


17

Якщо недокументовані функції не є вашою грою, те саме можна зробити тут:

Handlebars.registerHelper('index_of', function(context,ndx) {
  return context[ndx];
});

Потім у шаблоні

{{#index_of this 1}}{{/index_of}}   

Я написав вище, перш ніж мене влаштував

this.[0]

Я не можу побачити, як хтось надто далеко забирається за руль, не написавши власних помічників.



8

Спробуйте це, якщо ви хочете отримати перший / останній.

{{#each list}}

    {{#if @first}}
        <div class="active">
    {{else}}
        <div>
    {{/if}}

{{/each}}


{{#each list}}

    {{#if @last}}
        <div class="last-element">
    {{else}}
        <div>
    {{/if}}

{{/each}}

7

Поки ви лупцюєте в масиві з, eachі якщо ви хочете отримати доступ до іншого масиву в контексті поточного елемента, ви робите це так.

Ось приклад даних.

[
  {
    назва: 'foo',
    attr: ['boo', 'zoo']
  },
  {
    назва: "бар",
    attr: ['далеко', 'zar']
  }
]

Ось руль, щоб отримати перший елемент у attrмасиві.

{{# кожний гравець}}
  <p> {{this.name}} </p>

  {{#з цим.attr}}
    <p> {{це. [0]}} </p>
  {{/ з}}

{{/ кожен}}

Це виведе

<p> foo </p>
<p> boo </p>

<p> панель </p>
<p> далеко </p>

якщо масив attr має різну кількість елементів для різних об'єктів, то який процес буде повторювати через нього? наприклад: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['far', 'zar', 'sar]}], то як Ви збираєтесь показати весь attr для кожного об'єкта масиву?
Партха Рой

я не пробував цього, але я припускаю, що {{#with this.attr}} thisпрацюватиме замістьthis.[0]
Fatih Acet

1

Наступний синтаксис також може бути використаний, якщо масив не названий (просто масив передається шаблону):

  <ul id="luke_should_be_here">
  {{this.1.name}}
  </ul>

0

У моєму випадку я хотів отримати доступ до масиву всередині призначеного для користувача помічника,

{{#ifCond arr.[@index] "foo" }}

Що не спрацювало, але відповідь, запропонована @julesbou, спрацювала.

Робочий код:

{{#ifCond (lookup arr @index) "" }}

Сподіваюсь, це допомагає! Ура.

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