在ember数据中,如果你想获取模型的集合,它的惯例是使用它:
this.store.findAll('order');
或使用过滤器,这个:
this.store.find('order', {shopId: 63});
所以你传递了模型名称,Ember-data将为你构建一个URL,它看起来像(取决于你的适配器):
GET /api/orders
GET /api/orders?shopId=63
所以这会做两件事
但是,如果我想从两个网址获取订单呢? /api/orders
和/api/new_orders
?
第一个将照常工作:this.store.findAll('order')
,但有没有办法覆盖你从中获取的api路径?
也许像this.store.find('order', {path: '/new_orders'})
?
这样我最终可以得到一个用我的order
模型建模的对象集合,但是从不同的路径获取
答案 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