我正在使用RESTAdapter和RESTSerializer将rest服务集成到我的ember项目中。我能够使用默认的ApplicationAdapter(扩展RESTAdapter)执行rest服务操作,并且能够为特定模型创建自定义适配器。
我想要创建一个自定义适配器,它可以用于某些特定的模型集。
例如,
//Application adapter extends RESTAdapter
var LookupAdapter = ApplicationAdapter.extend({
host: Properties.LookupServiceHost,
namespace : Properties.LookupServiceNamespace,
});
export default LookupAdapter;
我有一些模型,如country、language等,用于在数据存储中获取和填充数据,现在我正在为每个模型使用单独的适配器、序列化器(用于处理请求、响应)。我希望那些特定的模型能够与LookupAdapter.一起工作我们是否可以将此适配器分配给模型,以便这些模型将使用LookupAdapter/LookupSerializer?
有没有办法告诉模型您的适配器是LookupAdapter?
发布于 2016-06-24 01:41:52
您可以为每个模型创建适配器和序列化程序,并导入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:
你可以这样做:
app/app/Adapters.js:
export default {
'country': 'lookup',
'city': 'lookup'
}
app/store/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);
}
});
https://stackoverflow.com/questions/38010205
复制