是否可以在 EmberJS 中创建嵌套适配器?
Is it possible to create a nested adapter in EmberJS?
我可以嵌套 Ember 数据适配器吗?
例如,假设我有一个带有模板 //templates/site.hbs
的模型 //models/site.js
,并且我想向 ${ENV.APP.API_HOST}/customers/${org}/sites
发出自定义 query()
请求 - 根据文档我可以简单地在 //adapters/site.js
.
自定义 query()
函数
但是,如果我在 //templates/sites/show.hbs
处有第二个模板并且我需要查询第二个截然不同的端点,例如 ${ENV.APP.API_HOST}/customers/${org}/sites/${id}
(或任何其他深度嵌套的数据端点),我可以设置一个适配器吗在 //adapters/sites/show.js
之下?我目前似乎无法通过 Ember 数据实现这一目标。
所以我能够使用 ember 插件自定义和修复此问题 - https://github.com/amiel/ember-data-url-templates/. It has good documentation and allows you to customise URL segments.
我的站点适配器
// adapters/site.js
export default ApplicationAdapter.extend({
urlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/sites{/site}',
queryUrlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/sites'
});
还有我的服务适配器
// adapters/service.js
export default ApplicationAdapter.extend({
urlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/services{/service}',
});
然后在我的路线中,由于 ember-data-url-templates,我加载了适配器中 URL 段拾取的参数。对 Ember 存储使用单独的 queryRecord() 调用允许我根据需要指定正确的端点。
// routes/sites.js
export default Ember.Route.extend({
model: function(params) {
let siteQuery = this.modelFor('sites');
let org = siteQuery.customer_orgCode;
return RSVP.hash({
site: this.get('store').queryRecord('site', { org: org, site: params.site_id })
});
}
});
// routes/sites/show.js
export default Ember.Route.extend({
model: function(params) {
let siteQuery = this.modelFor('sites');
let org = siteQuery.customer_orgCode;
return Ember.RSVP.hash({
service: this.get('store').queryRecord('service', { org: org, service: params.instance_id })
});
}
});
NB // 我使用了 RSVP 哈希,因为同一模型可能有多个调用,但您可以根据需要直接 return
this.get
查询直接到 model:
还有。
我可以嵌套 Ember 数据适配器吗?
例如,假设我有一个带有模板 //templates/site.hbs
的模型 //models/site.js
,并且我想向 ${ENV.APP.API_HOST}/customers/${org}/sites
发出自定义 query()
请求 - 根据文档我可以简单地在 //adapters/site.js
.
query()
函数
但是,如果我在 //templates/sites/show.hbs
处有第二个模板并且我需要查询第二个截然不同的端点,例如 ${ENV.APP.API_HOST}/customers/${org}/sites/${id}
(或任何其他深度嵌套的数据端点),我可以设置一个适配器吗在 //adapters/sites/show.js
之下?我目前似乎无法通过 Ember 数据实现这一目标。
所以我能够使用 ember 插件自定义和修复此问题 - https://github.com/amiel/ember-data-url-templates/. It has good documentation and allows you to customise URL segments.
我的站点适配器
// adapters/site.js
export default ApplicationAdapter.extend({
urlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/sites{/site}',
queryUrlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/sites'
});
还有我的服务适配器
// adapters/service.js
export default ApplicationAdapter.extend({
urlTemplate: '{+host}/api/{apiVersion}v1/customers{/org}/services{/service}',
});
然后在我的路线中,由于 ember-data-url-templates,我加载了适配器中 URL 段拾取的参数。对 Ember 存储使用单独的 queryRecord() 调用允许我根据需要指定正确的端点。
// routes/sites.js
export default Ember.Route.extend({
model: function(params) {
let siteQuery = this.modelFor('sites');
let org = siteQuery.customer_orgCode;
return RSVP.hash({
site: this.get('store').queryRecord('site', { org: org, site: params.site_id })
});
}
});
// routes/sites/show.js
export default Ember.Route.extend({
model: function(params) {
let siteQuery = this.modelFor('sites');
let org = siteQuery.customer_orgCode;
return Ember.RSVP.hash({
service: this.get('store').queryRecord('service', { org: org, service: params.instance_id })
});
}
});
NB // 我使用了 RSVP 哈希,因为同一模型可能有多个调用,但您可以根据需要直接 return
this.get
查询直接到 model:
还有。