如何分析 Ember 数据数组元素(计算 属性?)?
How can I analyze Ember Data array elements (computed property?)?
我想为 Ember 数据记录数组的每个元素创建唯一的缩写。例如,假设我们在 Persons table:
中有如下记录
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
如您所见,每个人的唯一缩写只能通过分析数组中的所有项目来分配。
这有点像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}}
您需要使用助手,因为这是一个演示问题:
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()}`;
}
我想为 Ember 数据记录数组的每个元素创建唯一的缩写。例如,假设我们在 Persons table:
中有如下记录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
如您所见,每个人的唯一缩写只能通过分析数组中的所有项目来分配。
这有点像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}}
您需要使用助手,因为这是一个演示问题:
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()}`;
}