Iterate over an ember model query

2019-01-20 12:53发布

问题:

this.store.findAll('game').then(function(results){
   // RUN SOME OPERATION ON THEM
})

I would like to know how I can play with the results variable. I understand I can do

results.get('firstObject') // returns the first object.

I'd like to know everything else I can do with it. Is there any api documentation for the results collection?

Thanks!

回答1:

From ember guides,

The below methods, will return the Promise, it will be resolved to Record or RecordArray.

store.findAll() returns a DS.PromiseArray that fulfills to a DS.RecordArray.
store.findRecord returns a promise that will be resolved with the record.
store.query() returns a DS.PromiseArray in the same way as findAll.

The below two are synchronus method, it will retrieve what is available in the store and returns record itself. it will not request the server to fetch data.

store.peekAll directly returns a DS.RecordArray.
store.peekRecord direclty returns record

It's important to note that DS.RecordArray is not a JavaScript array, it's an object that implements Ember.Enumerable. This is important because, for example, if you want to retrieve records by index, the [] notation will not work--you'll have to use objectAt(index) instead.

From Ember.Enumerable, most of the time I happened to use the following,
forEach to iterate
map to transform to new Array
filterBy findBy for filtering based on single property check
toArray converting to normal native array



回答2:

You did'nt google at all?

findAll will return a Promise which will resolve to a RecordArray. The RecordArray is an ArrayProxy.

http://emberjs.com/api/classes/Ember.ArrayProxy.html

Everything you need.

If you google "ember findall" you will find docs for "Ember.js - Models: Finding Records - Guides" as well.

https://guides.emberjs.com/v2.5.0/models/finding-records/