3

我有一条看起来像这样的路线:

model: function() {
  return Ember.RSVP.hash({
    orders: this.store.find('order')
  });
},

返回所有订单。订单具有以下字段iduser_idproduct_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还是别的?

4

2 回答 2

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.[]')
于 2014-12-19T19:24:46.870 回答
0

我刚刚遇到了这个答案,并且在使用ember-group-by插件方面取得了很大的成功。

groupedResults上面使用插件编写的示例如下所示:

import Controller from '@ember/controller';
import groupBy from 'ember-group-by';

export default Controller.extend({
  groupedResults: groupBy('model', 'type')
});

这是定义“属性”(计算属性)的更现代的方式,并且干净整洁

于 2018-12-28T11:50:44.890 回答