javascript – 如何为Ember数据创建自定义序列化程序

前端之家收集整理的这篇文章主要介绍了javascript – 如何为Ember数据创建自定义序列化程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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;
  }
})
原文链接:https://www.f2er.com/js/151882.html

猜你在找的JavaScript相关文章