Ember:必须在传递给 'push' 的对象中包含 'id'

Ember: Must include an 'id' in an object passed to 'push'

当前遇到以下错误:You must include an 'id' for failed-shotlist in an object passed to 'push'。这是我在开发过程中继承的代码库,我是 Ember.

的新手

据我了解,当后端没有响应 ID 时会发生这种情况。服务器负载如下所示(返回带有嵌入式失败射击列表记录的警报对象):

alertAuthor: "Test name"
alertDate:"2018-06-28T16:25:21+12:00"
alertIdentifier:"456e15c7-7a8b-11e8-84a8-06f4aef780e3"
alertType:"failedShotlist"
email:"test@gmail.com"
failedShotlist:
    projectIdentifier:"79050dfb-5faf-11e8-84a8-06f4aef780e3"
    projectName:"8888 st"
    projectRoleENUM:"bp"
    projectRoleName:"Building Participant"
    shotlistDescription:"Framing"
    shotlistIdentifier:"79d52773-5faf-11e8-84a8-06f4aef780e3"
inviteIdentifier:null
profileId:"c4e02bee-3d26-11e8-84a8-06f4aef780e3"
shotlistIdentifier:"79d52773-5faf-11e8-84a8-06f4aef780e3"

由于后端不响应 ID 属性,因此需要使用序列化器的 'primaryKey' 属性:

转换主键

serializers/alert.js

export default ApplicationSerializer.extend(EmbeddedRecordsMixin, {
  primaryKey: 'alertIdentifier',

  attrs: {
    'invite': { deserialize: 'records' },
    'failedShotlist': { deserialize: 'records' },
  },
});

我找不到任何关于此的提及,但我假设嵌入的记录由它们自己的序列化程序进一步序列化。现有的如下:

serializers/failedShotlist.js

export default ApplicationSerializer.extend({
  attrs: {
    'shotlistId': { key: 'shotlistIdentifier' },
    'projectId': { key: 'projectIdentifier' },
  },
});

由于 failedShotlist 对象的 ID 也需要转换,我更新了它以包含 primaryKey 道具:

serializers/failedShotlist.js

export default ApplicationSerializer.extend({
  primaryKey: 'shotlistIdentifier',

  attrs: {
    'shotlistId': { key: 'shotlistIdentifier' },
    'projectId': { key: 'projectIdentifier' },
  },
});

不幸的是,这导致了我最初遇到的相同错误。关于如何解决这个问题有什么想法吗?

我忽略的一点是适配器和序列化程序的源文件没有遵循代码库其余部分的命名约定。

其中序列化程序被称为 failedShotlist.js,与之相关的模型被称为 failed-shotlist.js

将序列化程序文件重命名为 failed-shotlist.js 允许我现有的代码工作:

export default ApplicationSerializer.extend({
  primaryKey: 'shotlistIdentifier'
}