【问题标题】:Can I use normal (rails default) JSON response on Ember Data?我可以在 Ember Data 上使用普通(rails 默认)JSON 响应吗?
【发布时间】:2015-03-19 15:37:40
【问题描述】:

我正在使用Ember/Ember-Data 开展一个项目,并且有一个相关的/已经存在的服务,它提供带有 JSON 响应的 API。

我的项目必须与该服务交互,但该 API 的响应如下所示:

{ "id": 39402, "name": "My Name" }

[ {"id": 38492, "name": "Other Name" } ]

Ember-Data 兼容响应不需要 person:persons:

如何在不更改服务或不构建 API 网关的情况下在 Ember-Data 上使用此响应?

【问题讨论】:

    标签: json api ember.js ember-data


    【解决方案1】:

    Ember-Data 使用DS.RestAdapter,而DS.RESTSerializer 又使用从DS.JSONSerializer 扩展而来的DS.JSONSerializer,用于序列化、提取和按摩来自服务器的数据。

    因为在您的情况下,您的有效负载中已经有了数据,所以您需要为读取数据做的是覆盖JSONSerializer 中的extract 方法,这实际上非常简单。

    如果您使用的是ember-cli(您应该这样做:)),那么位于app/serializers 目录中的person.js 文件将如下所示。

    import DS from 'ember-data';
    
    export default DS.JSONSerializer.extend({
      extract: function(store, primaryType, payload) {
        return payload;
      }
    });
    

    如果您没有使用ember-cli,您可以执行以下操作:

    App.PersonSerializer = DS.JSONSerializer.extend({
      extract: function(store, primaryType, payload) {
        return payload;
      }
    });
    

    【讨论】:

    • 谢谢,我使用从 ActiveModelSerializer 扩展的自定义 Serializer 并覆盖 normalizePayload 方法进行了测试,但这对我的情况不利。我有多个模型,我需要扩展单个超级自定义序列化程序。我会尝试你的建议。顺便说一句,将 JSONSrializer 与 ActiveModelAdapter 一起使用时是否有任何限制?或者该方法可以在 ActiveModelSerializer 上使用?最后,提取、归一化等全流程是什么?是否有任何参考来理解序列?再次感谢。
    • 看看这个我快速拼凑起来的 repo...github.com/kalmanh/ember-data-with-default-rails-json
    • 好的,我会检查你的。非常感谢。无论如何,我测试了覆盖 extract 并且工作正常,我发现 extract 是否被覆盖,所以 normalizePayload 没有被调用,我再次测试了“只记录并调用 super()”覆盖两者,@987654338 @ 在 extract 方法中被调用。我需要对步骤进行更多研究。谢谢。
    • 我对@9​​87654340@ 很满意,因为我不担心型号名称或复数(这在normalizePayload 上很重要,所以我可以制作单个序列化器并通过扩展用于更多型号.
    • 糟糕!我在完全覆盖extract 时发现了一些问题。问题在其他问题 (stackoverflow.com/questions/29215984/…) 中进行了描述,所以...不要在不了解超级方法或其副作用的情况下覆盖 extract
    猜你喜欢
    • 2016-05-17
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多