繁体   English   中英

For Loop over Backbone Collection

[英]For Loop over Backbone Collection

骨干相当新,所以这是一个非常基本的问题。 我有一个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循环来通过骨干集合? 还有,我有办法吗?

Backbone集合不是一个数组,所以for ... in将不会产生你期望的结果。 如果要使用简单循环,则需要查看集合的models属性。

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

下划线方法(28)

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

  • forEach(每个)
  • ...

因此,如果您想避免访问models属性,可以使用mappluck

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

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

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

for object in object.models

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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