我有一个API返回没有正确格式化为Ember消费的
JSON.
而不是这个(希望是什么):
而不是这个(希望是什么):
{ events: [
{ id: 1,title: "Event 1",description: "Learn Ember" },{ id: 2,title: "Event 2",description: "Learn Ember 2" }
]}
我得到:
{ events: [
{ event: { id: 1,"Event 1",description: "Learn Ember" }},{ event: { id: 2,"Event 2",description: "Learn Ember 2" }}
]}
所以如果我理解正确,我需要创建一个自定义Serializer来修改JSON.
var store = DS.Store.create({
adapter: DS.RESTAdapter.create({
serializer: DS.Serializer.create({
// which hook should I override??
})
})
});
我已经阅读了与DS.Serializer相关的代码注释,但我不明白如何实现我想要的…
我该怎么做?
ps:我的目标是让App.Event.find()工作.目前,我收到Uncaught错误:断言失败:您的服务器返回一个带有0的哈希,但是没有映射.这就是为什么我需要修复收到的JSON.
编辑:这是我如何工作,现在:
extractMany: function(loader,json,type,records) {
var root = this.rootForType(type),roots = this.pluralize(root);
json = reformatJSON(root,roots,json);
this._super(loader,records);
}
解决方法
我假设响应仅包含ID,并且您尝试提取它们.
您将需要对DS.JSONSerializer进行子类化,这将提供处理JSON有效内容的基本行为.特别是,您将要覆盖extractHasMany钩子:
// elsewhere in your file
function singularize(key) {
// remove the trailing `s`. You might want to store a hash of
// plural->singular if you deal with names that don't follow
// this pattern
return key.substr(0,key.length - 1);
}
DS.JSONSerializer.extend({
extractHasMany: function(type,hash,key) {
return hash[key][singularize(key)].id;
}
})