Javascript 序列化余烬数据的关系
好的,这是我的json响应:Javascript 序列化余烬数据的关系,javascript,ember.js,ember-data,json-api,Javascript,Ember.js,Ember Data,Json Api,好的,这是我的json响应: export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { extractArray: function(store, typeClass, payload) { payload.products = payload.data; delete payload.data; return this._super(store, typeCla
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
extractArray: function(store, typeClass, payload) {
payload.products = payload.data;
delete payload.data;
return this._super(store, typeClass, payload);
}
});
项目:
收藏:
{
"data": [
{
"id": 34,
"name": "HDG common nails 50lbs",
"slug": "hdg-common-nails-50lbs4569",
"description": "Accusantium ipsam impedit omnis sint dolorum.",
"image_src": "nail-box-angle.png",
"categories": {
"data": [
{
"id": 2,
"name": "nails",
"image_src": "nails-icon.png"
}
]
}
}
]
}
我能够为主要响应创建一个序列化器:
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
extractArray: function(store, typeClass, payload) {
payload.products = payload.data;
delete payload.data;
return this._super(store, typeClass, payload);
}
});
一切都很好,我遇到的问题是在本例中的关系acategories:DS.hasMany('category')
。我得到的错误是:
A (subclass of DS.Model) record was pushed into the store with the value of categories being '{data: [object Object]}', but categories is a hasMany relationship so the value must be an array.
所以我的问题是,我应该编辑哪个方法才能像对其父对象那样序列化关系?我添加了
DS.EmbeddedRecordsMixin
,使我的人际关系生活变得更加轻松 如果我做对了,错误是由于在类别
键中有和对象导致的:
A (subclass of DS.Model) record was pushed into the store with the value of categories being '{data: [object Object]}', but categories is a hasMany relationship so the value must be an array.
因此,您必须将数组从此块categories:{“data”:[…]}
提取到categories:[…]
您可以像这样简单地迭代有效负载:
var idx, key, item;
var len = payload.data.length;
for (idx=0; idx<len; idx++) {
item = payload.data[idx];
for (key in item) {
if (item[key].hasOwnProperty('data')) {
item[key] = item.data;
}
}
}
varidx,key,item;
var len=有效载荷.data.length;
对于(idx=0;idx)您是否可以使用相同的方法处理此问题:extractArray?这并不理想,但您可以访问有效负载。我将创建一个函数,如normalizeRelatedArrays
,并迭代有效负载键,查找包含数据键作为值的子项,然后将其删除。最终,Ember希望具有“类别”:[{…项目1},{…项目2}]@enspandi您能再扩展一下吗?如果您不介意的话,可以举个例子吗?