For Loop over Backbone Collection

时间:2012-07-30 17:57:22

标签: javascript backbone.js model coffeescript backbone-collections

骨干相当新,所以这是一个非常基本的问题。我将一个Backbone集合传递给一个函数,我可以证明它已经被传递,并且集合中的模型都有id。

以下是我设置ID的方法 -

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

在另一个函数中(通过使模型触发事件来访问) -

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

我认为这个问题可能是因为我正在迭代整个集合,因为当我尝试

for object in objects
   console.log(object)

我看到两个未定义的。它是否正确?如果是这样,为什么我不能使用for循环来通过骨干集合?还有,我有办法吗?

3 个答案:

答案 0 :(得分:20)

Backbone集合不是数组,因此for ... in不会产生您期望的结果。如果要使用简单循环,则需要查看集合的models属性。

但是,Backbone集合有various Underscore methods mixed in

  

下划线方法(28)

     

Backbone代理Underscore.js,在 Backbone.Collection 上提供28个迭代函数。这里没有记录它们,但您可以查看Underscore文档以获取完整的详细信息......

     
      
  • forEach(each)
  •   
  • ...
  •   

如果您不想访问map,可以使用pluckmodels property

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

pluck方法或多或少只是map的特例,但集合实现了本机版本而不是使用Underscore版本,因此它们可以采用模型属性而不是简单的对象属性

答案 1 :(得分:5)

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

答案 2 :(得分:4)

for object in object.models

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