我正在尝试从以下网址结构中获取数据:
${ENV.APP.API_HOST}/api/v1/customers/:customer_orgCode/sites/
我正在使用适配器使用buildURL对请求进行整形,并使用以下文件:
// router.js
this.route('sites', { path: 'customers/:customer_orgCode/sites' }, function() {
this.route('show', { path: ':site_id' });
});
// adapters/site.js
export default ApplicationAdapter.extend({
buildURL (modelName, id, snapshot, requestType, query) {
// return `${ENV.APP.API_HOST}/api/v1/customers/${snapshot???}/sites/`;
return `${ENV.APP.API_HOST}/api/v1/customers/239/sites/`;
}
}
// routes/sites/index.js
export default Ember.Route.extend({
model: function() {
let superQuery = this._super(...arguments),
org = superQuery.customer_orgCode;
this.store.findAll('site', org);
}
});
我能够在模型上获得customer_orgCode,但无法将其拉入适配器。我注意到该模型没有在Ember检查器中填充,但是当我发出请求时,站点数据存在。有谁知道如何用路由器上的params用customer_orgCode动态填充buildURL?然后指定站点/索引以使用“站点”模型?
答案 0 :(得分:3)
好的,我已经弄明白了。我需要在路线中使用query()
而不是findAll()
。这允许buildURL
从路由中获取查询参数并将其作为第5个参数传递给ie。 - buildURL(modelName, id, snapshot, requestType, query)
。然后在路线中,我忽略了return
作为我的模型设置的一部分。所以对于任何有兴趣的人来说,解决方案都是如此。
// router.js
this.route('sites', { path: 'customers/:customer_orgCode/sites' }, function() {
this.route('show', { path: ':site_id' });
});
// adapters/site.js
export default ApplicationAdapter.extend({
buildURL (modelName, id, snapshot, requestType, query) {
let org = query.org;
return `${ENV.APP.API_HOST}/api/v1/customers/${org}/sites/`;
}
});
// routes/sites/index.js
export default Ember.Route.extend({
model: function() {
let superQuery = this._super(...arguments),
org = superQuery.customer_orgCode;
return this.store.query('site', {org:org});
}
});