pra*_*432 12 javascript model coffeescript backbone.js backbone.js-collections
骨干相当新,所以这是一个非常基本的问题.我有一个Backbone集合传递给一个函数,我可以证明它已经通过,并且集合中的模型有id.
这是我如何设置ID -
convertToMapObjects: (results) =>
objectList = new ObjectList()
results.each(result)->
testObj = new TestObject()
testObj.set
id = result.get("id")
objectList.add(testObj)
Run Code Online (Sandbox Code Playgroud)
在另一个函数中(通过使模型触发事件来访问) -
getIds: (objects) =>
ids = (object.id for object in objects)
Run Code Online (Sandbox Code Playgroud)
我认为问题可能是因为我正在迭代这个集合,因为当我尝试的时候
for object in objects
console.log(object)
Run Code Online (Sandbox Code Playgroud)
我看到两个未定义的.它是否正确?如果是这样,为什么我不能使用for循环来通过骨干集合?还有,我有办法吗?
mu *_*ort 20
Backbone集合不是数组,因此for ... in
不会产生您期望的结果.models
如果要使用简单循环,则需要查看集合的属性.
但是,Backbone集合中混合了各种Underscore方法:
下划线方法(28)
Backbone代理Underscore.js,在Backbone.Collection上提供28个迭代函数.它们并未全部记录在案,但您可以查看Underscore文档以获取完整的详细信息......
- forEach(每个)
- ...
所以您可以使用map
或者pluck
如果您想避免访问该models
属性:
ids = objects.map (m) -> m.id
ids = objects.pluck 'id'
Run Code Online (Sandbox Code Playgroud)
该pluck
方法或多或少只是一个特例,map
但集合实现了本机版本而不是使用Underscore版本,因此它们可以采用模型属性而不是简单的对象属性.