Ember.js错误:您必须包含一个' id'对于传递给' push'

时间:2016-08-04 00:57:35

标签: javascript json ember.js ember-data

我用来获取数据的REST API并没有按照Ember.js的预期提供正确的JSON。我们的数据中没有id值。

[{"objectID":"340907","owner":"Lokesh"},{"objectID":"340908","owner":"Cherukuri"}]

所以,我创建了一个序列化器:

串行器/ baddata.js

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: 'objectID'
});

适配器/ baddata.js

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
    host: 'http://localhost:8080',
    buildURL : function(modelName, id) {
        return this.host + "/baddata/trains/"+ id;
    }
});

模型/ baddata.js

import DS from 'ember-data';

export default DS.Model.extend({
    owner: DS.attr('string')
});

这并没有解决问题。有人可以纠正我的错误吗?

2 个答案:

答案 0 :(得分:1)

我正在使用mongo,在您的示例中,我看到您使用了ApplicationSerializer。我认为您需要使用以下

如果你使用JSONSerializer那么

import DS from 'ember-data';
export default DS.JSONSerializer.extend({
  primaryKey: 'objectID'
});

如果您使用REST Serializer

import DS from 'ember-data';
export default DS. RESTSerializer.extend({
  primaryKey: 'objectID'
});

我尝试搜索ApplicationSerializer类,但在doc下没有提到。这对我和mongo有用,我用它来改变_id

希望有所帮助

答案 1 :(得分:0)

您希望使用DS.RESTSerializer并覆盖normalizeResponse将您的数据转换为:

{ baddata: { "id":"340907", "owner":"Lokesh" } }

objectID转换为id只会让您的生活更轻松。您也可以,因为您已经需要覆盖normalizeResponse来格式化有效负载。

这假设您一次只提取一条记录。如果您获取多条记录,则需要

{
  baddatas: [
    { "id":"340907", "owner":"Lokesh" },
    { "id":"340908","owner":"Cherukuri" }
  ]
}

请参阅DS.RESTSerializer#normalizeResponse