2015-02-24 75 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