Ember.js embedded json errors out#您必须在传递给push的哈希中包含一个id
获取此错误。不知道我为什么会犯这个错误……如果有人能帮我找出这个错误的原因,我将不胜感激 加载路由时出错:错误:断言失败:您必须在传递给push at new Error(本机)at Error.Ember.Error的哈希中包含id 从其他与类似错误相关的帖子中可以看出,这与未正确处理主键的json有关。但我的json响应看起来是正确的Ember.js embedded json errors out#您必须在传递给push的哈希中包含一个id,ember.js,ember-data,Ember.js,Ember Data,获取此错误。不知道我为什么会犯这个错误……如果有人能帮我找出这个错误的原因,我将不胜感激 加载路由时出错:错误:断言失败:您必须在传递给push at new Error(本机)at Error.Ember.Error的哈希中包含id 从其他与类似错误相关的帖子中可以看出,这与未正确处理主键的json有关。但我的json响应看起来是正确的 ****here are model objects:**** var PersonInfo = DS.Model.extend({ first: D
****here are model objects:****
var PersonInfo = DS.Model.extend({
first: DS.attr('string'),
last : DS.attr('string'),
addresses: DS.hasMany('personAddress', {embedded: 'always'})
});
Ember.Inflector.inflector.irregular("personInfo", "peopleInfo");
export default PersonInfo;
var Address = DS.Model.extend({
type: DS.attr('string'),
personInfo: DS.belongsTo('personInfo')
});
export default Address;
****here is my deserializer:****
var PersonInfoSerializer = DS.ActiveModelSerializer.extend({
primaryKey: 'id',
extractArray: function(store, type, payload, id, requestType) {
var peopleInfo =payload.peopleInfo;
var adds = [];
// debugger;
peopleInfo.forEach(function(personInfo){
var addresses = personInfo.addresses,
addressIds = addresses.mapProperty('id');
adds.push(addresses);
personInfo.addresses = addressIds;
});
payload.addresses = adds;
return this._super(store, type, payload, id, requestType); }
});
export default PersonInfoSerializer;
****and here is the json response which i am mocking in API STUB****
server.get('/peopleInfo', function(req, res) {
var person_info = {
"peopleInfo": [{
"id": "1",
"first": "Tom",
"last": "Dale",
"addresses": [{
"id": "1",
"type": "Home"
}, {
"id": "2",
"type": "Work"
}]
}]
};
res.send(person_info);
});
我不知道您为什么要使用ActiveModelSerializer,但如果您的数据不是以Rails通常提供的格式提供的,那么ActiveModelSerializer并不能真正为您带来任何好处 您发现数据的格式不正确。此外,不需要再编写什么都不做的{embedded:'always'}。您可能需要查看转换文档
使用活动模型序列化程序有什么原因吗?
App.PersonInfoSerializer = DS.RESTSerializer.extend({
extractArray: function(store, type, payload, id, requestType) {
var peopleInfo =payload.peopleInfo;
var adds = [];
peopleInfo.forEach(function(personInfo){
//debugger;
var addresses = personInfo.addresses,
addressIds = addresses.getEach('id');
adds = adds.concat(addresses);
personInfo.addresses = addressIds;
});
payload.personAddresses = adds;
return this._super(store, type, payload, id, requestType);
}
});