我正在玩peekAll(),试图理解它是如何工作的,最终目的是迭代结果。
在路线的模型钩子中,我有:
var peekAllResults = this.store.peekAll('position');
console.log("peekAllResults = ", peekAllResults);
var peekAllResultsContent = peekAllResults.get('content');
console.log("peekAlLresultsContent = ", peekAllResultsContent);
这是根据我在我的应用程序中获得的内容返回的数据。
特别是,这是控制台中显示的内容:
到目前为止一切顺利。根据我的预测,有8条记录符合预期。
但是当我添加时:
console.log("peekAllResultsContent.length=", peekAllResultsContent.length)
我得到:peekAllResultsContent.length = 0
如果我做peekAllResultsContent.get(“length”)
也是一样的那里发生了什么?
我认为peekAll是一个返回数组的同步调用。是否有一些技巧可以打开它并查看数组中的实际内容?我甚至无法获得长度,所以我认为我没有走上正确的轨道。
答案 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
});