为什么backbone.js在访问模型时返回一个空数组
Why is backbone.js returning an empty array when accessing models?
我有一个路由器正在访问它的集合。我的for循环没有遍历模型,所以我尝试记录集合,看看它返回了什么。事实证明,当我直接记录集合时,我会看到预期的所有模型。但是,如果我尝试记录集合的models属性,我会得到一个空数组!这没有道理。这些线直接跟在一起。我试着改变顺序,得到了同样的结果。
console.log(this.collection);
=> Shots
_byCid: Object
_byId: Object
length: 15
models: Array[15]
__proto__: Shots
...
console.log(this.collection.models);
=> []
console.log(this.collection.length);
=> 0
为什么会发生这种情况?
以下是路由器中的代码,以便更好地了解该代码的触发位置:
# Routers
class Draft.Routers.Shots extends Backbone.Router
routes:
'' : 'index'
'shots/:id' : 'show'
initialize: ->
@collection = new Draft.Collections.Shots()
@collection.fetch()
index: ->
console.log @collection
console.log @collection.models
Jim,
这并不能解决你的问题——你已经解决了。但它解释了为什么您会看到控制台输出。
当您运行console.log(this)时,您将输出对象本身,并且控制台链接引用(如果您愿意,可以使用指针)到内部变量。
当您在控制台中查看它时,当console.log(this)运行时,模型区域是空的,但当您查看日志时,集合已完成加载模型,内部数组变量已更新,对象日志中对该变量的引用显示当前内容。
基本上,在console.log(this)中,内部模型变量继续其正常寿命,控制台显示您查看它时的当前状态,而不是您调用它时的状态。使用console.log(this.models),数组将按原样转储,不保留引用,所有内部值都将逐个转储。。
这种行为很容易在短时间内重现,看看这个小提琴。。http://jsfiddle.net/bendog/XVkHW/
我发现我需要监听集合才能重置。因此,我没有将模型传递到视图中,而是创建了另一个期望集合的视图,并侦听"重置"事件以激发视图的"渲染"。
# Routers
class Draft.Routers.Shots extends Backbone.Router
routes:
'' : 'index'
'shots/:id' : 'show'
initialize: ->
@collection = new Draft.Collections.Shots()
@collection.fetch()
index: ->
view = new Draft.Views.Desktop(collection: @collection)
# Views
class Draft.Views.Desktop extends Backbone.View
el: $("body")
initialize: ->
@collection.on("reset",@render,this)
render: ->
console.log @collection
console.log @collection.length
您可以使用promise。(完成即可)
@collection.fetch().done =>
for model in @collection.models
console.log model
这将为您提供@collection的模型。
或者如果你不需要强迫应用程序等待,
@collection.on 'sync', =>
for model in @collection.models
console.log model
这两者都会让你做你想做的事。
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 如何在PHP数组中加载下一个youtube
- 查找对象数组是否包含其中一个标记的最快方法
- 如何使用Javascript和Ajax传递一个HTML选择标签到PHP $_POST与一个(数组)var当名称属性是一个