12

对骨干来说相当新,所以这是一个非常基本的问题。我有一个 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 循环来遍历骨干集合?另外,有没有办法我可以这样做?

4

3 回答 3

20

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

但是,Backbone 集合中混合了各种 Underscore 方法

下划线方法 (28)

Underscore.js 的 Backbone 代理,在Backbone.Collection上提供 28 个迭代函数。此处并未全部记录,但您可以查看 Underscore 文档以了解完整详细信息……</p>

  • forEach(每个)
  • ...

因此,您可以使用map或者pluck如果您想避免访问该models属性

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

pluck方法或多或少只是一个特例,map但集合实现了本机版本而不是使用下划线版本,以便它们可以提取模型属性而不是简单的对象属性。

于 2012-07-30T18:26:59.813 回答
5

您想循环遍历集合的models属性,而不是集合对象本身。

于 2012-07-30T18:11:51.883 回答
4
for object in object.models

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

于 2012-07-31T03:43:00.617 回答