我有一个需要组合来自多个主机的REST API的应用程序
目前我有
App.ApplicationAdapter = DS.RESTAdapter.extend
namespace: 'api/v1'
我想做像
这样的事情App.FooAdapter = DS.RESTAdapter.extend
namespace: 'api/v1'
host: 'http://myserver.com'
App.BarAdapter = DS.RESTAdapter.extend
namespace: 'api/v1'
host: 'http://myotherserver.com'
我试图改变
this.get('store').findAll('post')
可以正常使用
this.get('Foo') ... etc or
this.get('FooAdapter')... etc
但正在
无法读取属性' findAll'未定义的。我如何参考特定的适配器?
谢谢!
答案 0 :(得分:1)
您应该定义一个适配器,然后定义find
和findAll
做什么。
App.ApplicationAdapter = DS.Adapter.extend({
findAll: function(store, type, id) {
var url1 = 'http://myserver.com',
url2 = 'http://myotherserver.com';
return new Ember.RSVP.Promise(function(resolve, reject) {
Em.RSVP.all([
jQuery.getJSON(url1),
jQuery.getJSON(url2)
]).then(function(arr) {
// arr is an array containing the responses from your AJAX requests
var someData = arr[0],
otherData = arr[1];
// Munge the data to get what you need for your model
var modelData = ...
// then return it from the method. ED will instantiate the appropriate
// model using your data
Ember.run(null, resolve, modelData);
}, function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
});
});
},
find: ...
});
您需要使用type
来指定不同模型的网址。或者,您可以为每个模型定义单独的适配器。
您可能还想阅读the guide以了解有关自定义适配器的更多信息。