Как я могу проанализировать элементы массива Ember Data (вычисляемое свойство?)?

Я хочу создать уникальные сокращения для каждого элемента массива записей Ember Data. Например, предположим, что у нас есть следующие записи в таблице Persons:

name: Mike Jones
department: IT

name: Mike Smith
department: IT

name: John Doe
department: Accounting

name: Jane Doe
department: Accounting

То, что я хотел бы, это вывод, как это:

IT
MJ: Mike Jones
MS: Mike Smith

Accounting
JoD: John Doe
JaD: Jane Doe    

Как видите, уникальное сокращение для каждого человека может быть назначено только путем анализа всех элементов в массиве.

Это немного похоже на вычисление количества оставшихся Todos в документации Ember: http://guides.emberjs.com/v2.0.0/object-model/computed-properties-and-aggregate-data/

Но это руководство описывает использование контроллера, который, как я понимаю, устарел и не касается работы с Ember Data.

Я предполагаю, что мой шаблон будет выглядеть так, но что я добавлю к своему маршруту?

{{#each model as |department|}}
{{department.name}}
{{#each department.persons as |person|}}
{{person.computedAbbreviation}}: {{person.name}}
{{/each}}
{{/each}}

1 ответ

Решение

Вы захотите использовать помощника, так как это проблема презентации:

import Ember from 'ember';

const { Helper: { helper } } = Ember;

export function nameInitials([name]) {
  return name.match(/\b(\w)/g).join('').toUpperCase();
}

export default helper(nameInitials);

И в вашем шаблоне вы будете использовать его:

{{name-initials person.name}}

Для случая, когда вам нужны первые 2 буквы имени человека, нам нужно изменить логику и прибегнуть к char. Когда логика становится такой:

export function nameInitials([name]) {
  let [firstName, lastName] = name.split(' ');
  return `${firstName[0].toUpperCase()}${firstName[1]}${lastName[0].toUpperCase()}`;
}
Другие вопросы по тегам