Javascript Ember.js错误:必须包含一个';id';对于传递给';推动';

Javascript Ember.js错误:必须包含一个';id';对于传递给';推动';,javascript,json,ember.js,ember-data,Javascript,Json,Ember.js,Ember Data,我用来获取数据的RESTAPI没有按照Ember.js的预期提供正确的JSON。我们的数据中没有id值 [{"objectID":"340907","owner":"Lokesh"},{"objectID":"340908","owner":"Cherukuri"}] 因此,我创建了一个序列化程序: 序列化程序/baddata.js import DS from 'ember-data'; export default DS.JSONSerializer.extend({ prima

我用来获取数据的RESTAPI没有按照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'
});
import DS from 'ember-data';

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

export default DS.Model.extend({
    owner: DS.attr('string')
});
适配器/baddata.js

import DS from 'ember-data';

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

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

export default DS.Model.extend({
    owner: DS.attr('string')
});
模型/baddata.js

import DS from 'ember-data';

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

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

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

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

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

如果您使用JSONSerializer,那么

import DS from 'ember-data';
export default DS.JSONSerializer.extend({
  primaryKey: 'objectID'
});
如果您使用REST序列化程序

import DS from 'ember-data';
export default DS. RESTSerializer.extend({
  primaryKey: 'objectID'
});
我试图搜索ApplicationSerializer类,但doc中没有提到它。这就是我和mongo的工作原理,我使用它来更改为_id


希望它有帮助

您希望使用
DS.RESTSerializer
和override
normalizeResponse
将数据转换为:

{ baddata: { "id":"340907", "owner":"Lokesh" } }
objectID
转换为
id
只会让你的生活更轻松。您也可以这样做,因为您已经需要覆盖
normalizeResponse
来格式化有效负载

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

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

请参见

一旦您使用
primaryKey
在序列化程序中映射了ID,它现在被称为
ID
,因此您不需要在模型中声明
objectID
,您应该在代码中的任何地方引用相关字段作为
ID
<代码>推送应该可以正常工作。它将在到达服务器的过程中映射回
primaryKey
。否。它不起作用。相同的错误您使用的是哪个序列化程序(json、jsonapi、rest)以及从API得到的完整响应?我使用的是JSONSerializer。是的,它是完全响应。当我将它更改为JSONSerializer时,发生了相同的错误。但当我更改为RESTSerializer时,出现了新的错误:无法读取null的属性“\u internalModel”。序列化程序是否希望我的响应具有根元素?服务器端的端点如何发送数据?如果使用ActiveModelSerializer或RESTSerializer,则应为root。下面是一篇相关文章,您可以覆盖它以排除root:我改为JSONSerializer。但这并没有解决问题如果是这样的话,那么在序列化程序上设置主键有什么意义,为什么文档不反映这一点?