ember data 不同模型用于同一端点

Posted

技术标签:

【中文标题】ember data 不同模型用于同一端点【英文标题】:ember data different models for same endpoint 【发布时间】:2019-01-07 16:35:54 【问题描述】:

我有一个 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"
  
  ]

【问题讨论】:

API 不会以 Ember-Data 期望的格式返回 JSON 数据这正是我不使用 ember 数据的原因。太不灵活了。只需使用您选择的 ajax 调用方法进行 ajax 调用,并且根本不使用 ember 数据 @liam 我正准备放弃。我想知道如果没有 ember 数据,Mirage 是否仍能正常工作。我非常依赖它,因为我领先于服务器端团队:) 我不使用海市蜃楼恐怕所以我不知道。有人可能会提供 ember 数据解决方案。 @PercivalMcGullicuddy 您绝对可以在没有 Ember Data 的情况下使用 Mirage - 您甚至可以使用模型和序列化程序来减少重复。但我会先手动写出路由处理程序。 @SamSelikoff 谢谢。我刚刚使用 ember-ajax 实现了简单的 ajax 调用(正如@Liam 所建议的那样),一切都按预期工作。甚至幻影。 【参考方案1】:

只有一个模型!

现在我看不出您的分页是如何工作的。根据这一点,您可能不应该使用findAll,而是使用query 来加载分页集。

total 不是模型的一部分,而是metadata 的一部分。使用自定义 JSONSerializer 并让 extractMeta 返回此内容。

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

【讨论】:

以上是关于ember data 不同模型用于同一端点的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ember.js 按模型类型/对象值选择视图模板

不确定如何从自定义端点检索数据?

EmberJS:更改加载模型的 url (ember-data)

Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

多个端点以公开同一资源的不同视图

如何将 GET 和 POST 重写到具有不同响应主体的同一端点?