2

在 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 对象

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

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

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

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

4

1 回答 1

0

您需要为此商店提供一个休息适配器并覆盖 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 返回一个正确的端点。然后,您可以解析此 url 并对其进行修改,以使用相同的数据发出第二个请求,但使用您的第二个端点。比您可以合并响应或单独使用它们。

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

于 2015-07-16T14:50:07.143 回答