-->

对于遍历骨干收藏(For Loop over Backbone Collection)

2019-06-26 15:08发布

相当新的骨干,所以这是一个非常基本的问题。 我有一个骨干收集传递给函数,我可以证明它已经过去了,该集合中的车型有IDS。

下面是我如何设置的标识 -

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)

我看见两个undefineds。 它是否正确? 如果是这样,为什么我不能用一个for循环都要经过骨干集合? 此外,有没有一种方法,我可以这样做?

Answer 1:

一个骨干集合不是一个数组中,以便for ... in不会产生您期望的结果。 你想看看集合的models属性,如果你想用一个简单的循环。

然而,主干收藏有各种下划线方法混合 :

下划线方法(28)

骨干代理来Underscore.js提供有关Backbone.Collection 28种迭代功能。 他们是不是所有的记录在这里,但你可以看看下划线文档的全部细节...

  • 的forEach(各)
  • ...

所以,你可以使用mappluck ,如果你想避免访问models属性 :

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

pluck的方法是,或多或少,只是一个特例map ,但集合实现原生版本,而不是使用下划线的版本,使他们能够采摘模型属性,而不是简单的对象属性。



Answer 2:

你要遍历所有的models属性的集合,而不是集合对象本身。



Answer 3:

for object in object.models

这会给你集合中的模型



文章来源: For Loop over Backbone Collection