2016-11-21 61 views
2

我試圖獲取從下列網址結構數據:我使用的適配器形狀buildURL請求與以下文件燼:如何從路由器添加PARAMS到適配器

${ENV.APP.API_HOST}/api/v1/customers/:customer_orgCode/sites/ 

// 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檢查器中,但是當我提出請求時,站點數據已經存在。有誰知道我可以通過路由器上的參數customer_orgCode動態填充buildURL嗎?然後指定網站/索引以使用「網站」模型?

+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}); 
    } 
});