我有一个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; } })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。