Javascript 获取URL作为余烬数据中的资源的模型
我有一个模型,它获取一个URL作为数据源,目前是一个其他模型的数组。我想将其映射为一个存储,因此我创建了一个充当中间层的模型 这是模式: app/models/user_info.jsJavascript 获取URL作为余烬数据中的资源的模型,javascript,ember.js,model,ember-data,Javascript,Ember.js,Model,Ember Data,我有一个模型,它获取一个URL作为数据源,目前是一个其他模型的数组。我想将其映射为一个存储,因此我创建了一个充当中间层的模型 这是模式: app/models/user_info.js export default DS.Model.extend({ .... studies: DS.belongsTo('studies-collection-id); .... app/models/studies-collection-id.js export default DS.Model.extend
export default DS.Model.extend({
....
studies: DS.belongsTo('studies-collection-id);
....
app/models/studies-collection-id.js
export default DS.Model.extend({
studies: DS.hasMany('study')
});
export default ApplicationAdapter.extend({
urlForFindRecord (id, modelName, snapshot) {
return(id);
}
});
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);
}
});
app/adapters/studies-collection-id.js
export default DS.Model.extend({
studies: DS.hasMany('study')
});
export default ApplicationAdapter.extend({
urlForFindRecord (id, modelName, snapshot) {
return(id);
}
});
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);
}
});
这很好,我得到了需要触发的请求,服务器响应了我所期望的一系列研究。问题是我无法让这些研究以任何方式到达商店
我尝试序列化响应,但目前没有成功。我发布我现在使用的内容:
/app/serializers/studies-collection-id.js
export default DS.Model.extend({
studies: DS.hasMany('study')
});
export default ApplicationAdapter.extend({
urlForFindRecord (id, modelName, snapshot) {
return(id);
}
});
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的字段。为了能够执行这两个查询并将它们加载到相应的存储中,我确实以这种方式修改了serialiser:
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);
}
});
我不太确定你的API是怎样的。您能展示一下您的请求URL和响应是什么样子的吗?我不确定您的API是什么样子的。您能展示一下您的请求URL和响应的样子吗?