2017-09-13 62 views

回答

2

爲了查詢單個模型,您必須爲您建立自定義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-postsource2-post,兩個適配器爲了指定它們各自的host,並且在將數據呈現給用戶時我將合併這兩個源。

無論哪種方式,兩種方法都會產生相同的最終結果。

相關問題