我正在开发一个带有Rails后端的Ember应用程序,使用优秀的JSONAPI::Resources gem来公开我的数据。
我希望在加载某些关系时使用store.findRecord
,store.query
等从我的后端获取记录。 JSONAPI ::资源supports this part of the spec但我无法弄清楚如何使Ember Data在请求网址中包含?include=...
参数。
如何指示Ember Data(2.2.0)在获取资源时要求后端包含关系?
答案 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']
}