Backbone.js - 打印出集合和collection.models给出不同的结果

时间:2011-12-08 21:45:54

标签: javascript backbone.js

我在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”,我可以看到集合中的模型列表确实已被更改。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

你在这里描述了两种不同的场景:集合不仅仅是一个模型数组......它附带了很多东西。集合的“模型”属性是所有数据的所在。只有这才是真理的绝对来源 - 其他任何东西都要么撒谎,要么做一些不应该做的事情。

编辑: 除此之外,为什么不引用'this'而不是'items'?即this.models?毕竟,如果你想知道你正在使用的集合内部是什么,那么必须引用一个全局变量有点愚蠢:)(而且很糟糕的做法)。

编辑#2: 此外,除非另有说明,否则'fetch'是异步的。所以如果你想获得一致的,可重现的结果,连续做两次提取就不会给你。如果其中一个请求因为某种原因甚至比另一个要慢一毫秒,那么无论如何你的结果都会出现故障。