我正在使用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?
答案 0 :(得分:2)
您可以为每个模型创建适配器和序列化器,并导入LookupAdapter / -Serializer并从中扩展。未经测试的代码:
// In file ../adapters/country.js
import LookupAdapter from '../adapters/lookup';
export default LookupAdapter.extend({});
我认为你甚至可以省略.extend({})
。
编辑:
如果您不想为每个模型创建适配器和序列化程序,则可以实现自己的DS.Store
。 DS.Store
提供了以下方法:
您可以编写一个映射表,将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);
}
});