打印出集合和集合.模型给出了不同的结果

Backbone.js - printing out the collection and collection.models give different results

本文关键字:集合 结果 模型 打印      更新时间:2023-09-26

在我的Backbone集合中有一个fetch,如下所示。

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});

,我特别打印出"项目"。,我可以看到集合中的模型列表确实被更改了。

这是怎么回事?

您在这里描述了两种不同的场景:集合不仅仅是一个模型数组。它有很多东西附着在上面。集合的"models"属性是所有数据所在的地方。只有这才是真理的绝对来源——其他任何东西要么是撒谎,要么是做了不该做的事。

编辑:另外,为什么不用"items"代替"this"呢?即this.models吗?毕竟,如果您想知道正在使用的集合内部是什么,那么必须引用全局变量有点愚蠢:)(而且是相当糟糕的做法)。

编辑# 2:此外,除非另有指定,否则'fetch'是异步的。如果你想要得到一个一致的,可重复的结果,在一行中做两次取回是不会得到它的。如果其中一个请求由于某种原因比另一个请求慢一毫秒,那么你的结果无论如何都会混乱。