控制台中的不确定性主干集合属性分配
Non deterministic Backbone Collection property assignment in console
我正在构建一个Backbone应用程序,并观察到一些无法放置的行为。考虑以下集合:
window.Pictures = Backbone.Collection.extend({
model: Picture,
url: 'latest.json',
parse: function(response) {
this.foobar = 1;
},
fetchPage: function() {
this.foobar = 2;
return this;
}
});
在Chrome(或Firefox)控制台上,我发出了以下命令:
> p = new Pictures(); p.fetch(); p.fetchPage();
> p.foobar
1
当我这样做时:
> p = new Pictures(); p.fetch()
> p.fetchPage();
> p.foobar
2
我真的不明白。为什么第一次执行与第二次执行不同?
fetch
调用是异步的,因为它涉及到对服务器的AJAX调用:
fetchcollection.fetch([选项])
从服务器获取此集合的默认模型集,并在集合到达时重置集合。
并且fetch
将调用parse
:
解析集合。解析(响应)
每当服务器在fetch
中返回集合的模型时,Backbone就会调用parse。
因此,p.parse()
可能在p.fetchPage()
之前或之后调用,具体取决于超出您控制范围的时间问题。
在第一种情况下:
> p = new Pictures(); p.fetch(); p.fetchPage();
fetchPage
在fetch
从服务器获得响应并开始调用parse
之前被调用,因此调用序列的结果如下:
- 您拨打
p.fetch()
- 进行AJAX调用
- 您拨打
p.fetchPage()
- 收到AJAX响应
- AJAX成功处理程序调用
p.parse()
在第二种情况下:
> p = new Pictures(); p.fetch()
> p.fetchPage();
在调用p.fetchPage()
之前,行与行之间经过了足够的时间让AJAX调用返回,因此事情按预期的顺序发生纯属偶然。
如果您需要按特定顺序进行操作,则需要使用fetch
提供的success
(可能还有error
)回调:
选项散列采用
success
和error
回调,这些回调将作为参数传递给(collection, response)
。
所以这应该会给你一个一致的结果2:
p = new Pictures();
p.fetch({
success: function(collection, response) {
collection.fetchPage();
console.log(collection.foobar);
}
});
当然,如果fetchPage
涉及AJAX调用,那么您必须添加另一层回调才能获得一致的foobar
值。
相关文章:
- 将css属性添加到对象的集合中
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- 从骨干集合筛选模型,然后为这些模型设置属性
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 如何在集合中指定模型的一个属性
- 主干:如何保存模型集合中模型的属性更改
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 集合作为 EmberJS 中的属性?(一对多关系)
- 我怎样才能得到“;类型“;集合中每个属性的
- 根据三个模型属性对主干集合进行排序
- 根据模型属性对主干集合进行排序
- 控制台中的不确定性主干集合属性分配
- 在添加/删除/重置时更新骨干集合属性
- 一对多关系——变量所有者集合属性
- 一个jquery组合多个.html集合属性
- js查询模型通过集合属性过滤
- 主干集集合属性(用于url)
- 为什么jQuery集合属性没有反映在.html()中?
- 如何使用javascript将属性从一个集合属性转换为一个新属性
- 不能交换模型集合属性