我有一条看起来像这样的路线:
model: function() {
return Ember.RSVP.hash({
orders: this.store.find('order')
});
},
返回所有订单。订单包含以下字段:id
,user_id
和product_id
。
我的API返回:
[
{ id: 1, user_id: 1, product_id:1 },
{ id: 2, user_id: 1, product_id:1 },
{ id: 3, user_id: 1, product_id:2 }
]
转换为,同一用户有3个订单。 2个苹果(每个花费1美元)和橙色(花费1美元)。
在我的.hbs
模板中。我希望展示以下内容:
2 apples: $2
1 orange: $1
如何分组订单?不幸的是,Ember.Enumerable类(http://emberjs.com/api/classes/Ember.Enumerable.html)最远为sortBy
。否groupBy
。
我应该看reduce
还是别的什么?
答案 0 :(得分:3)
查看以下讨论 - http://discuss.emberjs.com/t/ember-enumerable-no-group-by/3594
基本上,你会做类似
的事情groupedResults: function () {
var result = [];
this.get('content').forEach(function(item) {
var hasType = result.findBy('type', item.get('type'));
if(!hasType) {
result.pushObject(Ember.Object.create({
type: item.get('type'),
contents: []
}));
}
result.findBy('type', item.get('type')).get('contents').pushObject(item);
});
return result;
}.property('content.[]')
答案 1 :(得分:0)
我刚刚遇到了这个答案,使用ember-group-by插件取得了很多成功。
上面用插件编写的groupedResults
示例如下:
import Controller from '@ember/controller';
import groupBy from 'ember-group-by';
export default Controller.extend({
groupedResults: groupBy('model', 'type')
});
这是定义“属性”(computed properties)的一种更现代的方法,并且简洁整洁