在具有类似模型类型的单个应用程序中处理多个API

时间:2017-07-13 20:37:11

标签: ember.js ember-data

我有两个API,比方说:

  • aaa.com/api/v1/events
  • bbb.com/api/events

两者都实现JSONAPI适配器,然后返回带有type="events"的有效负载。

因此,我必须将这些模型的范围限定在子文件夹中:

  • models/aaa/event.js
  • models/bbb/event.js

这导致以这种方式查询模型:

this.get('store').findAll('aaa/event');

然后,我实现了一个适配器:

// adapters/aaa/event.js

import config from '../../config/environment';
import DS from 'ember-data';
import Ember from "ember";

const { String } = Ember;

export default DS.JSONAPIAdapter.extend({
  host: 'aaa.com',
  namespace: 'api/v1',

  pathForType: function(type) {
    return String
      .underscore(type) // `aaa/some-model` -> `aaa/some_model`
      .pluralize() // `aaa/some_model` -> `aaa/some_models`
      .replace("aaa/", ""); // `aaa/some_model` -> `some_model`
  },
});

到目前为止,Ember正确调用了aaa.com/api/v1/events,返回的有效内容被输入events但是Ember无法将其转换为aaa/events

我该怎么办?

1 个答案:

答案 0 :(得分:1)

因此,您获得了aaa/eventbbb/event的特定于模型的序列化程序。您可以覆盖modelNameFromPayloadType方法将events翻译为所需的型号名称aaa/events

对于aaa /事件序列化程序,

modelNameFromPayloadType(payloadType) {
  return 'aaa/event';
}

参见:
https://emberjs.com/api/ember-data/2.14/classes/DS.JSONAPISerializer/methods/modelNameFromPayloadType?anchor=modelNameFromPayloadType