Ember 数据 - 一个模型,两个端点

Ember data - One model, two endpoints

在ember数据中,如果要获取某个模型的集合,惯例是这样的:

this.store.findAll('order');

或者使用过滤器,这个:

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

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

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

所以这有两件事

但是如果我想从两个 URL 中获取订单怎么办? /api/orders/api/new_orders ?

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

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

这样我就可以得到一组使用我的 order 模型建模的对象,但从不同的路径获取

您需要为该商店提供一个 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 return 一个合适的终点。然后您可以解析此 url 并修改它以使用相同的数据发出第二个请求,但使用您的第二个端点。比您可以合并回复或单独使用它们。

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