灰烬你必须包含一个' id'对于传递给' push'的对象中的客户

时间:2016-08-13 23:02:25

标签: javascript ember.js ember-data ember-cli ember-router

我正在使用ember 2.7.0。我从resp API获得了以下数据,

{
"accounts": [
{
  "id": "57a3660793d4ba3a5b78a780",
  "status": null,
  "crid": "Someone",
  "deleted": false,
  "accountInfo": {
    "iccid": "accountId",
    "iccidValue": "accountValue"
  },
  "subscriptionInfo": null
},
{
  "id": "57a3660793d4ba3a5b78a780",
  "status": null,
  "crid": "Someone",
  "deleted": false,
  "accountInfo": {
    "iccid": "accountId",
    "iccidValue": "accountValue"
  },
  "subscriptionInfo": null
}
],
"user": {
"id": "288607702394",
"isdn": "491622897075",
"pcc": null
}
}

为客户创建的模型,其中包含所有帐户,用户等的详细信息:

Customer.js(型号)

export default DS.Model.extend({
    device:DS.hasMany('device'),
    user:DS.belongsTo('user')
});

accounts.js(型号)

status: DS.attr(),
id: DS.attr(),
status: DS.attr(),
crid: DS.attr(),
deleted: DS.attr(),
accountInfo: DS.attr(),
subscriptionInfo: DS.attr()

User.js(型号)

export default DS.Model.extend({
isdn: DS.attr(),
pcc: DS.attr()
});

为所有上述3个模型创建了序列化程序

Customer.js

export default ApplicationSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType){
console.log("Entered normalizeResponse",payload );
return this._super(...arguments)
}
});

Device.js

export default ApplicationSerializer.extend({
    primaryKey: 'id'
});

user.js的

export default ApplicationSerializer.extend({
primaryKey: 'id'
});

问题是在运行应用程序时我在chrome控制台中遇到以下问题:断言失败:您必须包含' id'对于传递给'推送'

的对象中的客户

我不知道如何分配' id'对于客户模型。实际上我想分配用户模型ID作为客户模型是可能的吗?如何在客户模型序列化器中实现?在客户序列化器的normalizeResponse中,我能够看到我的响应。

注意:我无法修改其余的响应。因此修改了余烬数据模型。

我在控制器中调用REST API GET的方式是

var customer = this.store.findRecord('customer',    this.get('customerID')).then((customer) => {
    console.log("customer::",customer);
  },(resp,status) => {
    console.log("resp:status:",resp,status);
  });

它总是输入错误响应。

你的帮助应该是值得的。

1 个答案:

答案 0 :(得分:0)

我不确定您存储数据的位置以及您使用的API类型,但根据我的经验(使用PHP或Loopback api)我已将id变量设置为null(不是必需的)。在数据库方面,我使用了mySQL,并将id字段设置为自动增量。 Ember已经预计了ID,并且不允许您编辑或创建ID