几天来,我一直在尝试使用 ember 数据。问题是我拥有的 api 与想要接收的结构 ember-data 不匹配。
物品:
{
"data": {
"id": 1,
"username": "rodzzlessa",
"slug": "rodzzlessa"
}
}
收藏:
{
"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"
}
]
}
}
]
}
从我所见,我需要修改 extractSingle 和 extractArray 方法。确实没有在线资源显示这些方法的实际作用以及如何修改它们。我查看了 ember-data api 指南,但该示例非常具体,而且它不是应用程序序列化程序,因此他们解决的问题似乎更容易。我试图找到一本 ember-data 书籍,但它们还不存在。有任何在线资源可以帮助我吗?
/***** 到目前为止更新 ******/
所以我能够创建一个应用程序序列化程序来处理集合和项目:
export default DS.RESTSerializer.extend({
extractArray: function(store, typeClass, payload) {
var root_key = Ember.Inflector.inflector.pluralize(typeClass.typeKey);
payload[root_key] = payload.data;
delete payload.data;
return this._super(store, typeClass, payload);
},
extractSingle: function(store, typeClass, payload, id){
var root_key = typeClass.typeKey;
payload[root_key] = payload.data;
delete payload.data;
return this._super(store, typeClass, payload, id);
}
});
现在我唯一的问题是处理我开始使用 normalize 方法处理的关系,这就是我到目前为止所拥有的:
normalize: function(typeClass, hash, prop){
self = this;
typeClass.eachRelationship(function(key, relationship){
if(relationship.kind === "hasMany"){
if( ! hash[key]){
return hash;
}
var hashed = hash[key].data;
hash[key] = hashed;
return hashed;
}
});
return this._super(typeClass, hash, prop);
}
现在我从 ember-data 得到的错误是这样的:
Assertion Failed: Ember Data expected a number or string to represent the record(s) in the `categories` relationship instead it found an object