我有一个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; } })