灰烬数据 - 一个模型,两个端点

时间:2015-07-16 14:15:32

标签: javascript json ember.js ember-data json-api

在ember数据中,如果你想获取模型的集合,它的惯例是使用它:

this.store.findAll('order');

或使用过滤器,这个:

this.store.find('order', {shopId: 63});

所以你传递了模型名称,Ember-data将为你构建一个URL,它看起来像(取决于你的适配器):

GET /api/orders
GET /api/orders?shopId=63

所以这会做两件事

  • 构建URL以从api
  • 获取数据
  • 将集合映射为JavaScript对象,使用您传递的模型作为第一个参数

但是,如果我想从两个网址获取订单呢? /api/orders/api/new_orders

第一个将照常工作:this.store.findAll('order'),但有没有办法覆盖你从中获取的api路径?

也许像this.store.find('order', {path: '/new_orders'})

这样我最终可以得到一个用我的order模型建模的对象集合,但是从不同的路径获取

1 个答案:

答案 0 :(得分:0)

您需要为此商店安装一个rest适配器并覆盖findAll方法。默认实现是这样的

findAll: function(store, type, sinceToken) {
    var query, url;

    if (sinceToken) {
      query = { since: sinceToken };
    }

    url = this.buildURL(type.modelName, null, null, 'findAll');

    return this.ajax(url, 'GET', { data: query });
  }

buildUrl会为您的第一个网址返回正确的端点。然后,您可以解析此URL并修改它以使用相同的数据发出第二个请求,但是使用第二个端点。您可以合并回复或单独使用它们。

参考:https://github.com/emberjs/data/blob/v1.13.5/packages/ember-data/lib/adapters/rest-adapter.js#L398