Ember数据多字模型字段未正确序列化

时间:2014-08-20 19:57:31

标签: serialization ember.js ember-data

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

我在资产模型中有一个名为' marketName'的字段。我的Rails后端希望将该字段称为' market_name'。我已经扩展了ActiveModelSerializer,并覆盖了' extractSingle'并且'序列化'方法。

奇怪之处在于 - 对于我的Asset模型中的所有其他字段,这些字段不是由多个单词组成的 - 我编写的序列化代码效果很好。没有问题。但是 - 对于包含多个单词的任何字段 - 序列化并不完全有效,因为它在创建时保存了资产 - 它没有正确填充资产模型的市场名称&# 39;字段(以及由多个单词组成的任何其他字段)。

例如,如果我检查' marketName'数据检查器中的字段显示为' {}'。如果我将我的资产模型中任何多字词字段的名称更改为单数(即更改' marketName'到' name')并相应地更新序列化代码 - everthing效果很好。

知道发生了什么事吗?

由于 戴夫

1 个答案:

答案 0 :(得分:0)

extractSingle()的测试中,核心团队(请参阅line 126,也显示以下incase链接对未来读者不利)确实如此,他们将变量传递为super_villains,然后之后,normalize()中包含的ActiveModelSerializer会将其更改为superVillains

所以我认为在你的extractSingle中假设值还没有camelCase,但仍然是underscore_format(例如,“market_name”),你应该是金色的!

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");
  }));
});