我正在尝试连接Ember Data以使用现有的REST API。我遇到的问题是REST实现不符合Ember Data期望的事情。我已经在网上搜索了可以建议如何使事情有效的文档,但是没有编写我自己的DS.Adapter实现,我不知所措。
以下是我的要求:
/api/user/12345
提供以下响应:
{
data: {
ID: '12345',
firstName: 'Fred',
lastName: 'Flintstone',
emailAddr: 'fred.flintstone@example.com'
}
}
Ember希望“数据”成为“用户”。不幸的是我无法轻易更改API。有什么建议吗?
由于
答案 0 :(得分:2)
我能想到的一种方法就是创建自己的序列化程序并覆盖extract
函数:
App.RESTSerializer = DS.RESTSerializer.extend({
extract: function(loader, json, type, record) {
var root = 'data';
if (json[root]) {
if (record) { loader.updateId(record, json[root]); }
this.extractRecordRepresentation(loader, type, json[root]);
}
}
});
App.Store = DS.Store.extend({
adapter: DS.RESTAdapter.extend({
serializer: App.RESTSerializer.create()
})
});
请注意,此修改假定您的请求内容始终位于JSON的
data
密钥下。
另外值得一提的是,原始extract
方法有两行未包含在示例中:
this.sideload(loader, type, json, root);
this.extractMeta(loader, type, json);
这会让您失去side loading
功能和metadata
提取功能。我希望失去此功能不是用于您的用例的 show stopper 。
希望它有所帮助。