Serialization 余烬数据多字模型字段未正确序列化

Serialization 余烬数据多字模型字段未正确序列化,serialization,ember.js,ember-data,Serialization,Ember.js,Ember Data,我在我编写的一些自定义序列化程序代码中看到一些奇怪的行为 我在资产模型中有一个名为“marketName”的字段。我的Rails后端希望此字段被称为“market\u name”。我扩展了ActiveModelSerializer,并重写了'extractSingle'和'serialize'方法 奇怪的是,对于我的资产模型中所有其他不是由多个单词组成的字段,我编写的序列化代码都非常有效。没有问题。但是,对于包含多个单词的任何字段,序列化并不完全有效,因为创建时它会保存资产,但不会正确填充资产模

我在我编写的一些自定义序列化程序代码中看到一些奇怪的行为

我在资产模型中有一个名为“marketName”的字段。我的Rails后端希望此字段被称为“market\u name”。我扩展了ActiveModelSerializer,并重写了'extractSingle'和'serialize'方法

奇怪的是,对于我的资产模型中所有其他不是由多个单词组成的字段,我编写的序列化代码都非常有效。没有问题。但是,对于包含多个单词的任何字段,序列化并不完全有效,因为创建时它会保存资产,但不会正确填充资产模型的“marketName”字段和由多个单词组成的任何其他字段

例如,如果我检查data inspector中的“marketName”字段,它将显示为“{}”。如果我将资产模型中任何多单词字段的名称更改为单数,也就是将“marketName”更改为“name”,并相应地更新序列化代码,那么一切都会很好

知道发生了什么吗

谢谢 Dave

在核心团队看到的extractSingle测试中,下面也显示了如果链接对未来的读者不好,他们将变量作为超级恶棍传递,然后ActiveModelSerializer中包含的normalize将其更改为超级恶棍

因此,我认为在您的假设中,值还不是camelCase,但仍然是下划线格式,例如,市场名称,您应该是金色的

test("extractSingle", function() {
  env.container.register('adapter:superVillain', DS.ActiveModelAdapter);

  var json_hash = {
    home_planet:   {id: "1", name: "Umber", super_villain_ids: [1]},
    super_villains:  [{
      id: "1",
      first_name: "Tom",
      last_name: "Dale",
      home_planet_id: "1"
    }]
  };

  var json = env.amsSerializer.extractSingle(env.store, HomePlanet, json_hash);

  deepEqual(json, {
    "id": "1",
    "name": "Umber",
    "superVillains": [1]
  });

  env.store.find("superVillain", 1).then(async(function(minion){
    equal(minion.get('firstName'), "Tom");
  }));
});

共享您的序列化程序和一些其他相关代码将是一个很大的帮助。您应该在serialize和extractSingle方法中处理多字属性名称。一般来说,您不应该覆盖这些方法。