使用ember-data从非标准端点获取数据

时间:2015-05-03 21:47:48

标签: ember.js ember-data

我有一个端点/activities,它使用JSON以典型的方式运行RESTful API。我当然可以做以下事情:

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

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

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

获取特定的活动记录。这很好用。但API也允许使用URL参数进行某些过滤。例如,

  

GET / activities / type / exercise

与完整列表不同,它只会带回与“练习”相关的活动。使用ember-data回退数据的最佳方法是什么?至少我希望数据返回,与正确的模型相关联,并通过`DS.RecordArray或类似对象进行迭代。

理想情况下,我还希望每次点击此路线时都避免发出网络请求,尽管这可能是我无法“开箱即用”的。如果有任何最佳实践仍然感兴趣。

1 个答案:

答案 0 :(得分:1)

Ember已经可以查询数据,默认使用查询参数,即

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');
    },
});

我还没有对此进行过测试,但它应该有效。