使用不同的序列化器在 Ember/Rails 中发送/接收数据



我有一个使用 Ruby on Rails API 后端的 Ember CLI 应用程序。我最初使用 REST API 构建了它,并尝试将其迁移到使用 JSONAPI。

要将数据从 Rails 发送到 Ember,这很简单 - 我刚刚更新了我已经使用的 ActiveModelSerializers gem,并将 Ember 应用程序中的适配器和序列化器更新为如下所示:

export default DS.JSONAPIAdapter;
export default DS.JSONAPISerializer;

问题是重写我的整个 Rails 应用程序以响应新的数据格式需要做很多工作,所以我想在将数据从 Ember 发送到 Rails 时坚持使用 REST 适配器/序列化程序(至少在短期内)。我不知道该怎么做。我在想这样的事情:

export default DS.JSONAPISerializer.extend({
  serialize(snapshot, options){
    return DS.RESTSerializer.serialize(snapshot, options);
  }
});

这行不通。有人这样做过吗?有没有好办法?

非常感谢

基本上DS.RESTSerializer是一个class,但serialize是一个实例方法。所以你必须.create()序列化程序:

let instance = DS.RESTSerializer.create().serialize(...arguments)

但是,这将不起作用,因为序列化程序确实访问 DI 容器,因此期望由容器初始化。您可以像这样手动注入所有者:

DS.RESTSerializer.create(Ember.getOwner(this).ownerInjection()).serialize(...arguments);

最新更新