覆盖ember-data的网址约定

时间:2016-01-14 00:06:11

标签: ember.js ember-data

在我的ember-app中,我有这个模型:

//models/photo.js
export default DS.Model.extend({
    image: DS.attr(),
    title: DS.attr('string'),
    caption: DS.attr('string'),
    published: DS.attr('boolean')
});

然后我必须从REST api获取数据;特别是照片模型应该以这种方式从2个端点进行处理:

  • route / aaa - >应从/ photos端点获取,返回所有照片的数组;

这很简单:

var photos = this.store.findAll('photo')

和ember-data将自动调用/ photos端点,因为这遵循其约定;

  • route / bbb - >应该从/ feed获取; / feed REST api端点还返回一组照片(与上面相同的模型),但以某种方式过滤;

在任何情况下它都会返回一个照片对象数组,比如/ photos端点; 但在这种情况下,无法做到

var photos = this.store.findAll('photos')

就像在/ aaa路线中一样,因为这样做会告诉ember-data从/ photosopopetch获取;

如何从不同路由中的不同端点获取相同的模型? (我使用带有ember-data 2.2.1的ember 2.2.0)

2 个答案:

答案 0 :(得分:1)

除非你正在进行简单的ajax调用并推送有效负载来存储或修补适配器,否则你不能这样做。我不建议搞乱使用ember数据及其适配器,因为它肯定会回来咬你。您可以做的是传入一个参数并更改API控制器中的逻辑以对该参数执行if / else检查并发送您需要的相关数据。

路线1 - this.store.query('photo', { type: 'png' })

路线2 - this.store.query('photo', { type: 'jpeg' })

答案 1 :(得分:0)

简短的回答是你不能,因为适配器是每个型号,而不是每个路线。

但是,要解决此问题,您可以使用与store.push / store.pushPayload配对的普通ajax调用将数据加载到商店中。

有关详细信息,请参阅store documentation