我有一个模型,它将URL作为数据源,目前是其他模型的数组。我想将它映射为商店,因此我创建了一个充当中间人的模型。
这是架构:
应用程序/模型/ user_info.js
export default DS.Model.extend({
....
studies: DS.belongsTo('studies-collection-id);
....
应用程序/模型/研究信息收集id.js
export default DS.Model.extend({
studies: DS.hasMany('study')
});
应用程序/适配器/研究收集-id.js
export default ApplicationAdapter.extend({
urlForFindRecord (id, modelName, snapshot) {
return(id);
}
});
这很好用,我得到了我需要解雇的请求,服务器响应了我期待的一系列研究。问题是我不能让这些研究以任何方式到达商店。
我尝试将响应序列化但目前没有成功。我发布了我现在正在使用的内容:
/app/serializers/studies-collection-id.js
import ApplicationSerializer from './application';
export default ApplicationSerializer.extend({
primaryKey: 'self',
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
let jsonApiStudiesArray = [];
jsonApiStudiesArray['data'] = payload.slice(0);
jsonApiStudiesArray['self'] = id;
jsonApiStudiesArray['type'] = primaryModelClass.modelName;
jsonApiStudiesArray['data'] = [];
jsonApiStudiesArray['data']['attributes'] = payload.slice(0).map(function(item){
let returnArray = [];
returnArray['type'] = 'study';
returnArray['self'] = item['self'];
returnArray['attributes'] = item;
return(returnArray);
});
return this._super(store, primaryModelClass, jsonApiStudiesArray, id, requestType);
}
});
有人对此有什么建议吗?我觉得我正试图破解这个并且应该更容易。 非常感谢你的帮助
更新:我认为我找到了一个解决方案,让ember通过在它们之间使用虚拟模型来消化它。我的API返回带有指向资源的URL的字段。为了能够执行这两个查询并将它们加载到适当的商店中,我确实以这种方式修改了序列化器:
import ApplicationSerializer from './application';
export default ApplicationSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
let jsonApiStudiesArray = {};
jsonApiStudiesArray['self'] = id;
jsonApiStudiesArray['studies'] = payload.slice(0).map(function(item){
return(item['self']);
});
return this._super(store, primaryModelClass, jsonApiStudiesArray, id, requestType);
}
});