Ember.js 在DS.ActiveModelSerializer中使用DS.EmbeddedRecordsMixin复制记录

Ember.js 在DS.ActiveModelSerializer中使用DS.EmbeddedRecordsMixin复制记录,ember.js,ember-data,Ember.js,Ember Data,这是一种典型的情况,接收到的JSON需要在ember数据可以使用之前进行更改,下面是转换后的情况: { "profile":{ "first_name":"fsdf", "last_name":"sdfsdf", "company":null, "birthday":null, "emails":[ { "address":"sdfsdfsdf", "id":1, "kind"

这是一种典型的情况,接收到的JSON需要在ember数据可以使用之前进行更改,下面是转换后的情况:

{  
  "profile":{  
    "first_name":"fsdf",
    "last_name":"sdfsdf",
    "company":null,
    "birthday":null,
    "emails":[  
      {  
        "address":"sdfsdfsdf",
        "id":1,
        "kind":"main",
        "contactable_type":"Profile",
        "contactable_id":1
      }
    ],
    "addresses":[  

    ],
    "id":1
  }
}
这是在模型的序列化程序提取挂钩中完成的:

export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    emails: { embedded: 'always' },
    addresses: { embedded: 'always' }
  },
  extract: function(store, typeClass, payload, id, requestType) {
    let profile = normalizeProfile(payload, id),
      profileJSON = requestType == 'findAll' ? { profiles: [profile] } : {     profile: profile };
    return this._super(store, typeClass, profileJSON, id, requestType);
  },
});
还有这个._super(store、typeClass、profileJSON、id、requestType);返回

当第一次保存时,一切正常,但当再次保存配置文件时,电子邮件被复制-存储中有两个,一个有id,一个没有id。地址和种类属性是相等的。 余烬数据1.13.4

下面是它的样子

{
  "company":null,
  "birthday":null,
  "emails":[
    1
  ],
  "addresses":[

  ],
  "id":1,
  "firstName":"fsdf",
  "lastName":"sdfsdf"
}