【问题标题】:How to group Ember data records?如何对 Ember 数据记录进行分组?
【发布时间】:2015-02-18 05:46:56
【问题描述】:

我的路线如下所示:

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 还是别的什么?

【问题讨论】:

  • 我需要一个 js fiddle :)

标签: ember-data ember-cli ember-1


【解决方案1】:

我刚刚遇到了这个答案,并且在使用 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) 的更现代的方式,而且干净整洁?

【讨论】:

    【解决方案2】:

    查看以下讨论 - 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.[]')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      相关资源
      最近更新 更多