简体   繁体   中英

For Loop over Backbone Collection

Fairly new to backbone, so this is a really basic question. I have a Backbone collection passed into a function and I can prove that it has been passed and that the models in the collection have ids.

Here's how I'm setting the ids -

convertToMapObjects: (results)  =>
   objectList = new ObjectList()
   results.each(result)->
    testObj = new TestObject()
    testObj.set
      id = result.get("id")
    objectList.add(testObj)

And in another function ( accessed through making the model trigger an event) -

getIds: (objects) =>
ids = (object.id for object in objects) 

I think the issue may be because of how I'm iterating through the collection because when I tried doing

for object in objects
   console.log(object)

I saw two undefineds. Is this correct? If so, why can't I use a for loop to go through a backbone collection? Also, is there a way I could do so?

A Backbone collection is not an array so for ... in won't produce the results you're expecting. You want to look at the collection's models property if you want to use a simple loop.

However, Backbone collections have various Underscore methods mixed in :

Underscore Methods (28)

Backbone proxies to Underscore.js to provide 28 iteration functions on Backbone.Collection . They aren't all documented here, but you can take a look at the Underscore documentation for the full details…

  • forEach (each)
  • ...

So you can use map or pluck if you'd like to avoid accessing the models property :

ids = objects.map (m) -> m.id
ids = objects.pluck 'id'

The pluck method is, more or less, just a special case of map but collections implement a native version rather than using the Underscore version so that they can pluck model attributes rather than simple object properties.

您希望遍历集合的models属性 ,而不是集合对象本身。

for object in object.models

这将为您提供集合中的模型

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM