2015-05-03 31 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'); 
    }, 
}); 

我的天堂”吨测试这个,但它应该工作。