如何在 Rails 中使用 Ember 数据 2 和 JSONAPI::Resources 侧载 {json:api} 记录?
How to sideload {json:api} records with Ember Data 2 and JSONAPI::Resources in Rails?
我正在开发带有 Rails 后端的 Ember 应用程序,使用出色的 JSONAPI::Resources gem 公开我的数据。
我想使用 store.findRecord
、store.query
等从我的后端获取记录,同时旁加载某些关系。 JSONAPI::Resources supports this part of the spec 但我不知道如何使 Ember 数据在请求 URL.
中包含 ?include=...
参数
如何指示 Ember Data (2.2.0) 在获取资源时要求后端包含关系?
如果可以,您可以试用 Ember Data 2.4 beta,其中包括 ds-finder-include
功能标志。
此功能标志使您能够使用 includes
键传递选项散列。
要了解如何启用功能标志,请查看 guide。
我处理这个问题的方法是修改我的应用程序适配器来处理包含,然后将包含作为我的适配器选项传递到我的查询中。现在我只处理一个包含,但处理数组应该不会太难。
app/adapters/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']
}
我正在开发带有 Rails 后端的 Ember 应用程序,使用出色的 JSONAPI::Resources gem 公开我的数据。
我想使用 store.findRecord
、store.query
等从我的后端获取记录,同时旁加载某些关系。 JSONAPI::Resources supports this part of the spec 但我不知道如何使 Ember 数据在请求 URL.
?include=...
参数
如何指示 Ember Data (2.2.0) 在获取资源时要求后端包含关系?
如果可以,您可以试用 Ember Data 2.4 beta,其中包括 ds-finder-include
功能标志。
此功能标志使您能够使用 includes
键传递选项散列。
要了解如何启用功能标志,请查看 guide。
我处理这个问题的方法是修改我的应用程序适配器来处理包含,然后将包含作为我的适配器选项传递到我的查询中。现在我只处理一个包含,但处理数组应该不会太难。
app/adapters/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']
}