Итерация массива относительно индекса другого массива в руле - PullRequest
0 голосов
/ 07 апреля 2020
{{#each locationTable as |locationShifts index|}}
   {{#each get reasons index as |value|}}
     {{value}}
   {{/each}}
{{/each}}

Я хочу сделать что-то подобное. Использование 2 помощников одновременно «каждый» и «получить». Как я могу достичь чего-то подобного?

Ответы [ 2 ]

3 голосов
/ 07 апреля 2020

Если бы я подходил к этой проблеме в своей собственной кодовой базе, я бы написал @tracked функцию получения в Octane или вычисляемое свойство в предоктановом Ember, которое отображает два массива в новые объекты. Гораздо приятнее IMO отображать их в объекты, которые моделируют отношения между ними (вместо полагаются на индекс каждого элемента в двух отдельных массивах повсюду в вашей кодовой базе, что не является чем-то, что я нахожу интуитивным и что-то, что похоже, в дальнейшем это может привести к неожиданным ошибкам).

Допустим, у меня есть список имен и список ролей.

const names = ['Will', 'Wes', 'Janine'],
      roles = ['Father', 'Son', 'Mother'];

const people = names.map((name, idx) => {
  return {
    name: name,
    role: roles[idx]
  };
});

Вы можете экстраполировать, как это может выглядеть как вычисляемое / отслеживаемое свойство. Ключ в том, что мне удалось сгруппировать данные логически. Таким образом, в шаблоне вы можете просто:

{{#each people as |person|}}
  {{person.name}} is a {{person.role}}
{{/each}}

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

0 голосов
/ 07 апреля 2020

Было бы

{{#each (get reasons index) as |value|}}
  {{value}}
{{/each}}

, но я не уверен на 100%, если get работает для числительных c индексов для массивов.

...