模型获取URL作为ember-data中的资源

时间:2017-04-25 10:20:19

标签: javascript ember.js model ember-data

我有一个模型,它将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);
  }
});

0 个答案:

没有答案