Ember - 适用于多种型号的定制适配器和串行器

时间:2016-06-24 09:37:51

标签: ember.js ember-data

我正在使用RESTAdapter和RESTSerializer在我的ember项目中集成rest服务。我能够使用默认的ApplicationAdapter(Extend RESTAdapter)进行休息服务操作,并且我能够为特定模型创建自定义适配器。

我想创建一个可用于某些特定模型的自定义适配器。

例如,

//Application adapter extends RESTAdapter

var LookupAdapter = ApplicationAdapter.extend({
   host: Properties.LookupServiceHost,
   namespace : Properties.LookupServiceNamespace,
});

export default LookupAdapter;

我有一些模型,如国家/地区,语言等。对于在数据存储中提取和填充数据,现在我正在为每个模型使用单独的适配器,序列化程序(用于处理请求,响应)。我希望这些特定模型能够与 LookupAdapter 一起使用。我们是否可以将此适配器分配给模型,以便这些模型将使用LookupAdapter / LookupSerializer?

有没有办法告诉模型您的适配器是LookupAdapter?

1 个答案:

答案 0 :(得分:2)

您可以为每个模型创建适配器和序列化器,并导入LookupAdapter / -Serializer并从中扩展。未经测试的代码:

// In file ../adapters/country.js
import LookupAdapter from '../adapters/lookup';
export default LookupAdapter.extend({});

我认为你甚至可以省略.extend({})

编辑:

如果您不想为每个模型创建适配器和序列化程序,则可以实现自己的DS.StoreDS.Store提供了以下方法:

  • adapterFor
  • serializerFor

您可以编写一个映射表,将modelName映射到您指定的适配器。

另外,ember.js源代码说,当没有找到适配器时,使用ApplicationAdapter代替。

编辑2:

你可以这样做:

应用程序/映射/ adapters.js:

export default {
  'country': 'lookup',
  'city': 'lookup'
}

应用程序/商店/ application.js中:

import adaptersMapping from '../mappings/adapters';

export default DS.Store.extend({
  adapterFor(modelName) {
    if(adaptersMapping[modelName]) {
      return this._super(adaptersMapping[modelName]);
    }
    return this._super(modelName);
  }
});