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
获取数据
- 将集合映射为 JavaScript 个对象,使用您传递的模型 作为第一个参数
但是如果我想从两个 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
在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
模型建模的对象,但从不同的路径获取
您需要为该商店提供一个 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