2016-11-21 3 views
2

Я пытаюсь получить данные из следующей структуры URL:Ember: как добавить Params от маршрутизатора к адаптеру

${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, но данные сайтов присутствуют, когда я делаю запрос. Кто-нибудь знает, как я могу динамически заполнить buildURL с помощью customer_orgCode из параметров на маршрутизаторе? А затем укажите сайты/индекс для использования модели «сайт»?

+0

если вы используете JSONApiAdapter, то вы можете попробовать использовать http://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html#method_urlForFindAll – Sumit

ответ

2

ОК, я понял это. Мне нужно было использовать query() вместо findAll() в пути. Это позволяет buildURL выбрать параметр запроса из маршрута и передать его в качестве 5-го аргумента, т.е. - 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}); 
    } 
}); 
Смежные вопросы