我在Backbone集合中获取如下内容。
var Items = Backbone.Collection.extend({
get_items:function(data) {
this.fetch({
data:data,
success:function() {
console.log(items);
}
});
});
}
var items = new Items();
items.get_items({id:1});
items.get_items({id:2});
在每个console.log语句中,我希望集合的内容不同,因为我给出了不同的参数。但是在Chrome中,无论我给出什么样的“id”值,集合的内容都不会改变。
然而,如果我这样做
var Items = Backbone.Collection.extend({
get_items:function(data) {
this.fetch({
data:data,
success:function() {
console.log(items.models);
}
});
});
}
var items = new Items();
items.get_items({id:1});
items.get_items({id:2});
我特意打印出“items.models”,我可以看到集合中的模型列表确实已被更改。
这里发生了什么?
答案 0 :(得分:1)
你在这里描述了两种不同的场景:集合不仅仅是一个模型数组......它附带了很多东西。集合的“模型”属性是所有数据的所在。只有这才是真理的绝对来源 - 其他任何东西都要么撒谎,要么做一些不应该做的事情。
编辑: 除此之外,为什么不引用'this'而不是'items'?即this.models?毕竟,如果你想知道你正在使用的集合内部是什么,那么必须引用一个全局变量有点愚蠢:)(而且很糟糕的做法)。
编辑#2: 此外,除非另有说明,否则'fetch'是异步的。所以如果你想获得一致的,可重现的结果,连续做两次提取就不会给你。如果其中一个请求因为某种原因甚至比另一个要慢一毫秒,那么无论如何你的结果都会出现故障。