Как я могу проанализировать элементы массива 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()}`;
}