Ember peekAll回复了破解开放的结果

时间:2016-10-14 22:49:32

标签: ember.js

我正在玩peekAll(),试图理解它是如何工作的,最终目的是迭代结果。

在路线的模型钩子中,我有:

var peekAllResults = this.store.peekAll('position');
console.log("peekAllResults = ", peekAllResults);
var peekAllResultsContent = peekAllResults.get('content');
console.log("peekAlLresultsContent = ", peekAllResultsContent);

这是根据我在我的应用程序中获得的内容返回的数据。

特别是,这是控制台中显示的内容:

enter image description here

到目前为止一切顺利。根据我的预测,有8条记录符合预期。

但是当我添加时:

console.log("peekAllResultsContent.length=", peekAllResultsContent.length)

我得到:peekAllResultsContent.length = 0

如果我做peekAllResultsContent.get(“length”)

也是一样的

那里发生了什么?

我认为peekAll是一个返回数组的同步调用。是否有一些技巧可以打开它并查看数组中的实际内容?我甚至无法获得长度,所以我认为我没有走上正确的轨道。

1 个答案:

答案 0 :(得分:2)

所有内容都包含在Ember.Model个对象中,因此您无法看到console.log的明确结果。 但它背后没有任何魔力。如果实体已加载到商店,您可以通过peekAll获取它们。

const positions = this.get('store').peekAll('position');
console.log('positions length', positions.get('length');

//we can iterate over them:
positions.forEach(position => {
  console.log(position.get('name'));
};

//we can filter them:
const southOnlyPositions = positions.filter(position => position.get('direction') === 'south');

依旧......

不过:即使是承诺,你也不应该访问内容。你得到这样的结果:

const promises = this.get('store').findAll('position');

promises.then(positions => {
  // positions here behave same as before
});