2015-09-11 2 views
0

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

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 данных.

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

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

ответ

0

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

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 буквы имени человека, мы должны были бы изменить логику и прибегнуть к charAt, логика будет:

export function nameInitials([name]) { 
    let [firstName, lastName] = name.split(' '); 
    return `${firstName[0].toUpperCase()}${firstName[1]}${lastName[0].toUpperCase()}`; 
} 
Смежные вопросы