为了查询单个模型,您必须为您建立自定义adapter模型并实施您自己的findAll方法。这看起来像这样。请记住,为了处理HTTP故障,您仍然需要对其进行修改,并且您必须确保两个端点上的ID都是唯一的,否则会丢失流程中的一些记录。
// adapters/post.js
import DS from 'ember-data';
import RSVP from 'rsvp';
import $ from 'jquery';
import { A } from '@ember/array';
import { computed } from '@ember/object';
export default DS.RESTAdapter.extend({
hosts: computed(function() {
return A(['http://www.host-1-url.com', 'http://www.host-2-url.com']);
}),
async findAll(store, type, sinceToken) {
let query = { since: sinceToken };
// Query both hosts
let promises = this.get('hosts').map(async host => await $.getJSON(`${host}/api/posts`, query));
// Get responses
let responses = await RSVP.all(promises);
// Fabricate a payload that contains all the posts
let posts = await [].concat.apply([], responses.map(response => response.posts));
return { posts: posts };
}
});
如果你想这个代码在您的灰烬应用程序运行你需要这一点是为了适应async/await
关键字添加到您的ember-cli-build.js
文件:
'ember-cli-babel': {
includePolyfill: true
}
就个人而言,我会去它是一种不同的方式。
我会创建两个模型source1-post
和source2-post
,两个适配器为了指定它们各自的host
,并且在将数据呈现给用户时我将合并这两个源。
无论哪种方式,两种方法都会产生相同的最终结果。