为同一端点嵌入不同模型的数据

时间:2019-01-07 16:35:55

标签: ember.js ember-data ember-cli ember-cli-mirage ember-cli-addons

我有一个API不会以Ember-Data期望的格式返回JSON数据。尤其是在获取资源列表而不是单个资源时。

例如,GET /api/widgets/{id}

应该返回一个看起来像这样的小部件模型:

//app/models/widget.js

import DS from 'ember-data';

export default DS.Model.extend({
   name: DS.attr('string'),
   weight: DS.attr('number'),
   color: DS.attr('string')
});

通过GET /api/widgets/获取小部件的完整列表将返回一个模型,该模型应如下所示:

// app/models/widgetlist.js

import DS from 'ember-data';

 export default DS.Model.extend({
   total: 22,
   widgets: DS.hasMany('widget')
});

(我认为这就是我的小部件列表模型的外观。本质上,这是系统中的小部件总数和当前的分页小部件集)

我很难确定要使用哪种模型,自定义适配器和/或自定义序列化器的组合。

编辑:

// Server responses examples

// GET api/widgets/77

{  
  "id":77,
  "name":"Acoustic Twangdoodle",
  "weight":3,
  "color":"purple"
}

// GET api/widgets/

{
  "total":22,
  "widgets":[
  {
     "id":77,
     "name":"Acoustic Twangdoodle",
     "weight":3,
     "color":"purple"
  },
  {
     "id":88,
     "name":"Electric Twangdoodle",
     "weight":12,
     "color":"salmon"
  }
  ]
}

1 个答案:

答案 0 :(得分:2)

那只是一个模型!

现在我不知道您的分页如何工作。因此,您可能不应该使用findAll而是应该使用query来加载分页集。

total不是模型的一部分,而是metadata的一部分。使用自定义JSONSerializer,然后让extractMeta返回。

根据分页的工作方式,您想执行类似store.query('widget', { page: 3 })的操作。如果您更多地谈论如何访问第2页左右,则将更易于解释。