2015-02-24 86 views
0

我試圖通過使用一個控制器,此行來檢索已經被加載到存儲記錄檢索店方誌看截圖)。當我調用它的長度時,結果是「未定義」。在上面的代碼行運行之前,我已經使用Chrome Ember檢查器確認記錄確實已加載到產品中。我想,自從store.all返回一個記錄陣列,我可以立即迭代它,而不像承諾。請問我哪裏錯了?不能使用灰燼數據

Console

回答

0

問題是我試圖迭代使用傳統的for循環的記錄陣列。似乎a)recordarray不能返回長度,2)必須使用forEach循環遍歷它,這是我最初做的,但因爲forEach不支持break或continue,所以我放棄了。

+1

支持break和繼續forEach'很容易實現... http:// emberjs。 jsbin.com/nijebe/1/edit?html,js,console,output – Kalman 2015-02-24 16:53:39

+0

@KalmanHazins謝謝,這非常有幫助 – RunLoop 2015-02-24 16:59:54

-1

Ahh promises! :)

你應該能夠做到這一點:

var allProducts = this.store.all('product').then(function(products) { 
    return products; 
}); 
+0

你不需要使用承諾。請參閱:「find返回一個DS.PromiseArray滿足DS.RecordArray和*全部直接返回DS.RecordArray。*」 – 2015-02-24 16:15:36

1

返回的strange objectrecord array。這非常重要,因此Ember可以爲加載的數組設置觀察者。我相信這是造成你困惑的原因。請參閱more specifics in the docs

請注意,DS.RecordArray不是JavaScript數組。 它是一個實現Ember.Enumerable的對象。這是重要的 ,因爲,例如,如果您想通過索引檢索記錄,[] 表示法將不起作用 - 您將不得不使用objectAt(index)。

你將不得不看的機制的文檔爲DS.RecordArray,但你應該能夠使用forEach方法在其上進行迭代。請參閱ember array documentation for more details