【问题标题】:Ember understanding serializers and adaptersEmber 理解序列化器和适配器
【发布时间】:2016-05-28 09:09:19
【问题描述】:

我的前端应用程序(ember 2.3.1,ember-data 2.3.3)和后端(带有 jsonapi 序列化程序的 rails 5)之间的通信遇到了问题。

我会尽量描述我遇到的所有情况。

在后端,我想在 jsonapi 中发送响应并以 REST 格式获取请求。我正在使用序列化程序以及我如何检查后端发送正确的响应。例如{"data":[{"id":"1","type":"projects","attributes":{"title":"one"},"links...

在 ember 方面,我定义了 jsonapi 适配器和 rest 序列化程序。 当 ember 从后端接收数据时,我在控制台中收到警告,例如 Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using smart-task-ember@serializer:application:.modelNameFromPayloadKey("data")。 当我将 ember 中的序列化程序从 rest 更改为 jsonapi 时,一切都会正常工作。但是请求以 jsonapi 格式发送到后端。我收到了下一个参数{"data"=>{"attributes"=>{"title"=>"test"}, "type"=>"projects"}, "controller"=>"projects", "action"=>"create", "project"=>{}} 而不是{"project"=>{"title"=>"qwe"}, "controller"=>"projects", "action"=>"create"}

我不明白为什么 REST 序列化器和 jsonapi 适配器会相互影响,以及如何在 ember 中使用 REST 序列化器。我花了很多时间在这种奇怪的行为上,但什么都不懂。

我很乐意得到任何帮助:)

【问题讨论】:

  • 我试过使用 rest 适配器和 jsonapi 序列化程序,没有任何改变。看起来适配器和序列化器应该只使用一种格式。这也让我很困惑。
  • 我认为最好的办法是坚持使用 JSONAPI 适配器和序列化程序。您将需要覆盖序列化程序上的 serializeIntoHash 和/或 serialize 方法,以获取要发送到后端的 REST JSON 格式。
  • @Grapho 谢谢,这就像一个变种,但我仍然认为我身边遗漏了一些东西。
  • 为什么不使用 REST API 或 JSON API?恕我直言,同时使用这两种方法会给您的 API 带来一些混乱。

标签: ruby-on-rails rest ember.js json-api


【解决方案1】:

Adapters 确定 EmberData 如何与后端一起工作。它通常包括 URL 格式和请求标头。

Serializers 确定如何处理和格式化数据。因此,在您的情况下,您只需要在将数据发送到后端时更改数据格式。要实现这一点,您应该override serialize method

例如:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
  serialize(snapshot, options) {
    var json = this._super(...arguments);
    var res = json.data;
    return data;
  }
});

它将从请求中删除根节点data。所以你可以在发送之前将 json 转换成你想要的结构。

【讨论】:

  • 看来你是对的。我需要在 ember 中使用适配器和序列化程序。因为某些事情以我所期望的另一种方式发挥作用。
【解决方案2】:

Crabdar 的答案是您需要学习如何去做。如果您可以切换到使用 cerebris jsonapi-resources gem,您应该能够毫无问题地使用 ember jsonapi 适配器。这是一个相当成熟的实现

【讨论】:

  • 我同意克拉巴的观点。我需要重新考虑如何在应用之间进行交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多