単一のモデルをクエリするには、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
という2つのモデルを作成し、それぞれ対応するhost
を指定するために2つのアダプタを作成し、データをユーザーに提示するときに2つのフィードをマージします。
どちらの方法でも、両方の方法で同じ結果が得られます。