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.