Ember:如何从路由器添加params到适配器

时间:2016-11-21 02:38:54

标签: ember.js ember-data

我正在尝试从以下网址结构中获取数据:

${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?然后指定站点/索引以使用“站点”模型?

1 个答案:

答案 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});
  }
});