如何在Rails中使用Ember Data 2和JSONAPI :: Resources来加载{json:api}记录?

时间:2016-01-18 22:06:36

标签: ember.js ember-data json-api jsonapi-resources

我正在开发一个带有Rails后端的Ember应用程序,使用优秀的JSONAPI::Resources gem来公开我的数据。

我希望在加载某些关系时使用store.findRecordstore.query等从我的后端获取记录。 JSONAPI ::资源supports this part of the spec但我无法弄清楚如何使Ember Data在请求网址中包含?include=...参数。

如何指示Ember Data(2.2.0)在获取资源时要求后端包含关系?

2 个答案:

答案 0 :(得分:7)

如果可以,您可以试用Ember Data 2.4 beta,其中包含ds-finder-include功能标记。

此功能标志使您可以使用includes密钥传递选项哈希值。

要了解如何启用功能标记,请检查guide

答案 1 :(得分:4)

我处理此问题的方法是将我的应用程序适配器修改为进程包含,然后在我的查询中将include作为我的适配器选项传递。现在我只处理一个包含,但处理数组应该不会太难。

应用程序/适配器/ application.js中

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({

  urlForFindRecord(query, modelName, snapshot) {
    var url = this._super(...arguments);

    return this._processIncludes(url, snapshot);
  },

  urlForFindAll(query, modelName, snapshot) {
    var url = this._super(...arguments);

    return this._processIncludes(url, snapshot);
  },

  _processIncludes(url, snapshot) {
    var options = snapshot && snapshot.adapterOptions;

    if (options && options.include) {
      url = `${url}?include=${options.include}`;
    }

    return url;
  },


});

然后,在我的路由模型钩子中,我只是添加我的适配器选项。

return this.store.findRecord('myModel', params.id, {
  adapterOptions: {
    include: ['myChildModel']
  }