2014-06-17 33 views
1

這是我第一次用Ember超時,我試圖從REST api檢索數據。當我用下面的打電話找()在我的控制器工作原理:EmberJS DS.PromiseObject與DS.PromiseArray

this.set('episode', this.store.find('episode', 1); 

這會返回一個DS.PromiseObject和模板綁定輸入控件更新以反映返回的值。

然而,當我用下面的調用find()方法,使用查詢:

this.set('episode', this.store.find('episode', {anotherField: x}); 

這會返回一個DS.PromiseArray和模板沒有更新綁定控件。

我只希望這個調用返回一個記錄,不知道該ID,所以我無法使用第一個有效的例子。

如何從控制器訪問DS.PromiseArray中的底層記錄?

謝謝。

回答

2

只是等待承諾解決,然後將第一個記錄設置爲情節。當你通過查詢客戶端發現你不知道會返回的結果數量。所以它給你一個集合,可以是0+條記錄。不像id它知道它是單個記錄,因此是兩種不同類型的代理。

var self = this; 
this.store.find('episode', {anotherField: x}).then(function(results){ 
    self.set('episode', results.get('firstObject')); 
});