我能否嵌套Ember数据适配器?
例如,假设我的模型//models/site.js
包含模板//templates/site.hbs
并且我想向query()
发出自定义${ENV.APP.API_HOST}/customers/${org}/sites
请求 - 根据文档我可以在query()
处自定义//adapters/site.js
功能。
但是,如果我在//templates/sites/show.hbs
有第二个模板并且我需要查询第二个截然不同的端点,例如${ENV.APP.API_HOST}/customers/${org}/sites/${id}
(或任何其他深度嵌套的数据端点),我可以在{{}下设置适配器{1}}?我目前无法通过Ember Data实现这一目标。
答案 0 :(得分:1)
答案 1 :(得分:1)
因此,我可以使用ember插件自定义和修复此问题 - https://github.com/amiel/ember-data-url-templates/。它具有良好的文档,允许您自定义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段拾取的参数。使用单独的queryRecord()调用Ember存储允许我根据需要指定正确的端点。
// 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 })
});
}
});
注意//我已使用RSVP哈希,因为可能会对同一模型进行多次调用,但您可以根据需要直接return
this.get
查询也是model:
。