2015-09-11 60 views
0

我想为Ember数据记录数组的每个元素创建唯一的缩写。例如,假设我们在个人表以下记录:如何分析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  

正如你所看到的,每个人独特的缩写,只能通过分析数组中的所有项目进行分配。

这有点像计算灰烬文档中剩余的待办事项数: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}}

对于情况你想要这个人的名字的前两个字母,我们将不得不改变逻辑并且求助于charAt,逻辑变成:

export function nameInitials([name]) { 
    let [firstName, lastName] = name.split(' '); 
    return `${firstName[0].toUpperCase()}${firstName[1]}${lastName[0].toUpperCase()}`; 
}