2015-05-03 30 views
2

我有一個端點/activities,它以使用JSON的RESTful API的典型方式工作。當然,我可以做這樣的事情如下:使用ember-data從非標準端點獲取數據

model: function() { 
    return this.store.find('activity'); 
} 

返回的活動列表。或者我可以:

model: function(params) { 
    return this.store.find('activity', params.id); 
} 

獲取特定活動記錄。這工作正常。但是API也允許使用URL參數完成某些過濾。因此,例如,

GET /活動/型/運動

不像一個完整列表也只是帶回其與「運動」有關的活動。使用ember-data來恢復數據的最佳方式是什麼?至少我希望數據回來,與正確的模型相關聯,並且可以通過DS.RecordArray或類似的對象進行迭代。

理想情況下,我也想避免每次打這條路線時發出網絡請求,儘管可能這是我無法「開箱即用」的事情。如果有任何最佳實踐仍然感興趣。

回答

1

灰燼可以使用查詢參數即

store.find(activities, {type: 'exercise'}); // /activities?type=exercise 

你可以重寫你的活動適配器findQuery已經查詢數據,在默認情況下,這樣,如果符合您的API:

// /adapters/activity.js 
import DS form 'ember-data'; 
export default DS.RESTAdapter.extend({ 
    findQuery: function(store, type, query) { 

     for(var key in query) break; // get first key in the example 'type' 
     var path = ['', key, query[key]].join('/'); 

     return this.ajax(this.buildURL(type.typeKey) + path, 'GET'); 
    }, 
}); 

我的天堂」噸測試這個,但它應該工作。