Ember - 多个模型的自定义适配器和序列化器
Ember - Custom adapter and serializer for multiple models
我正在使用 RESTAdapter 和 RESTSerializer 在我的 ember 项目中集成休息服务。我能够使用默认的 ApplicationAdapter(扩展 RESTAdapter)执行其余服务操作,并且能够为特定模型创建自定义适配器。
我想创建一个可用于某些特定模型集的自定义适配器。
例子,
//Application adapter extends RESTAdapter
var LookupAdapter = ApplicationAdapter.extend({
host: Properties.LookupServiceHost,
namespace : Properties.LookupServiceNamespace,
});
export default LookupAdapter;
我有一些模型,如国家、语言等。为了在数据存储中获取和填充数据,现在我使用单独的适配器、序列化程序(用于处理请求、响应)每个模型。我希望这些特定模型与 LookupAdapter 一起使用。我们能否将此适配器分配给模型,以便这些模型将使用 LookupAdapter/LookupSerializer?
有没有办法告诉模型你的 Adapter 是 LookupAdapter?
您可以为每个模型创建适配器和序列化器并导入您的 LookupAdapter / -Serializer 并从中扩展。前方未经测试的代码:
// In file ../adapters/country.js
import LookupAdapter from '../adapters/lookup';
export default LookupAdapter.extend({});
我想你甚至可以省略 .extend({})
。
编辑:
如果您不想为每个模型创建适配器和序列化程序,您可以实现自己的 DS.Store
。 DS.Store
提供了这些方法:
- 适配器
- serializerFor
您可以编写映射 table,将 modelName
映射到您指定的适配器。
此外,ember.js 源代码指出,当找不到适配器时,将使用 ApplicationAdapter
。
编辑 2:
你可以这样做:
app/mappings/adapters.js:
export default {
'country': 'lookup',
'city': 'lookup'
}
app/stores/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);
}
});
我正在使用 RESTAdapter 和 RESTSerializer 在我的 ember 项目中集成休息服务。我能够使用默认的 ApplicationAdapter(扩展 RESTAdapter)执行其余服务操作,并且能够为特定模型创建自定义适配器。
我想创建一个可用于某些特定模型集的自定义适配器。
例子,
//Application adapter extends RESTAdapter
var LookupAdapter = ApplicationAdapter.extend({
host: Properties.LookupServiceHost,
namespace : Properties.LookupServiceNamespace,
});
export default LookupAdapter;
我有一些模型,如国家、语言等。为了在数据存储中获取和填充数据,现在我使用单独的适配器、序列化程序(用于处理请求、响应)每个模型。我希望这些特定模型与 LookupAdapter 一起使用。我们能否将此适配器分配给模型,以便这些模型将使用 LookupAdapter/LookupSerializer?
有没有办法告诉模型你的 Adapter 是 LookupAdapter?
您可以为每个模型创建适配器和序列化器并导入您的 LookupAdapter / -Serializer 并从中扩展。前方未经测试的代码:
// In file ../adapters/country.js
import LookupAdapter from '../adapters/lookup';
export default LookupAdapter.extend({});
我想你甚至可以省略 .extend({})
。
编辑:
如果您不想为每个模型创建适配器和序列化程序,您可以实现自己的 DS.Store
。 DS.Store
提供了这些方法:
- 适配器
- serializerFor
您可以编写映射 table,将 modelName
映射到您指定的适配器。
此外,ember.js 源代码指出,当找不到适配器时,将使用 ApplicationAdapter
。
编辑 2:
你可以这样做:
app/mappings/adapters.js:
export default {
'country': 'lookup',
'city': 'lookup'
}
app/stores/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);
}
});