什么是“;d”;当我们控制台.log()一个Backbone.js集合时,在Google Chrome中

What is the "d" in Google Chrome when we console.log() a Backbone.js Collection?

本文关键字:集合 js Backbone Chrome Google 一个 我们 什么 log 控制台      更新时间:2023-09-26

每当我控制台.log()一个Backbone.js集合时,谷歌Chrome的控制台就会显示字母"d",这与Safari或Firefox中典型的"Object"日志条目不同。有区别吗?

此外,每当我console.log()集合中的任何子项(例如,console.log(exampleCollection.models))时,我都会得到一个空数组。我做错什么了吗?

代码:

(function($) {
  var Item = Backbone.Model.extend({
    defaults: {
      "sku":"",
      "brand":"",
      "model":"",
      "picture":"placeholder.jpg"
    },
    url: function() {
      return this.id ? 'products/' + this.id : 'products';
    }
  });
  var Items = Backbone.Collection.extend({
    model: Item,
    url: "products"
  });
  var items = new Items;
  items.fetch();
  console.log(items); // shows "d" in Google Chrome along with typical 
                      // object-like drop-down options
  console.log(items.models); //  shows "[]" empty array in console
})(jQuery);

我还是Backbone的新手,但我认为Jon Saw是对的。Backbone的所有模型、集合和视图都显示为d,并且在缩小的代码中到处都是。如果你看到d,这是一个很好的迹象,你可以像骨干对象一样操纵它。

至于空数组,我怀疑您的服务器端代码没有正确返回集合。你能举一个例子说明你是如何处理这个请求的,以及你要发回什么吗?

我记得我遇到过类似的问题,解决方案是确保它返回了漂亮的json数据,并且内容类型是application/json。但我的记忆是模糊的。

编辑:您可能想使用fetch()可用的成功和错误回调,以了解更多情况。

编辑2:这篇过去的文章可能与您的问题有关-使用Backbone 将数据从服务器获取

第3版:我发布了一个完整的主干示例,创建模型,将它们添加到集合,从服务器以集合的形式获取额外的模型,并将它们添加至现有集合(而不是重置)。它有混合的观点和子观点,但有些方面似乎与这个问题相似,所以我包括参考文献:

跟踪收集的旧部分和新部分