2014-07-10 20 views
0

我在Ember DS.Store中有兩種類型的記錄:用戶和位置。 (其實我有更多,但爲了簡單起見)。如何查找Ember.js中多個記錄類型的所有條目?

我們得到的,也就是說,「用戶」的所有條目,我只想做

this.store.find('user') 

現在說我有一個變量allResults,我把它分配給該命令。

allResults = this.store.find('user') 

這給了我什麼灰燼調用promiseArray,而這個承諾串負荷後做什麼,我只是當我只需要一個類型的記錄

allResults.then(successfunction(), failurefunction()) 

現在這個偉大的工程 - 說我需要只有用戶,我可以輕鬆地將我的successfunction()作爲第一個參數。

但是,我的需求超越了:我基本上建立了一個搜索欄來搜索這些記錄,所以如果有人輸入「mary」,它需要同時顯示用戶「Mary」和位置「mary Ave」例如)

所以我需要的

this.store.find('user') 

&

this.store.find('location') 

因此,組合的結果,這裏是我的問題:我覺得牛逼帽子要麼他們會工作。]

  1. 有沒有一種方法,我可以獲取所有數據屬於既有「用戶」和「位置」,並將它返回一個光榮promiseArray?這似乎是可能的,也是解決這個問題的最好方法。

  2. 你可以連接兩個promiseArray來創建一個更大的一個,然後爲更大的那個用戶使用.then函數嗎?如果是這樣,怎麼樣?

回答

1

您可以合併承諾。

http://emberjs.com/api/classes/Ember.RSVP.Promise.html

像這樣的東西應該爲你工作:

var bothPromise = Promise.all([ 
    store.find('user'), 
    store.find('location') 
]).then(function(values){ 
    //merge the values arrays 
    var all = Em.A(); 
    all.addObjects(values[0]); //users 
    all.addObjects(values[1]); //locations 
    return all; 
}); 

bothPromise.then(function(allObjects){... 

請參閱「組合」一節在此承諾庫調用Q的承諾相結合的另一種解釋。

相關問題