9

使用backbone.js并尝试从postsList数组中获取数据我在chrome console.log中得到了这个

d {length: 0, models: Array[0], _byId: Object, _byCid: Object, constructor: function…}
  _byCid: Object
  _byId: Object
  length: 9
  models: Array[9]
  __proto__: f

当我尝试使用时console.log(postsList.length),我得到 0,但里面有 9 个模型。我不知道如何获得它们的数量。

4

2 回答 2

12

是的,这是奇怪的行为:)

Chrome 会在您使用后立即显示对象预览console.log。当您输入console.log(collection)时它是空的(可能您已经从服务器获取模型)。但是,当您在控制台中展开对象时,Chrome 会显示当前的实际对象参数。

在控制台中试试这个:

var object = {key1:{prop:true}};
console.log(object)
object.key2 = true;
console.log(object)

要获取集合长度,请使用以下方式:

collection.fetch({context:collection}).done(function() {
  console.log(this.length)
});

编辑

不,不,不 :) 使用this.length而不是this.lenght.

collection.fetch({context:collection}).done(function() {
    // equals to this.length
    console.log(this.size());
    // get all models from collection (array of Backbone.Models)
    console.log(this.models);
    // get all models from collection (like simple array of objects)
    console.log(this.toJSON());
    // get model with index 1
    console.log(this.at(1));
    // get model data with index 1
    console.log(this.at(1).toJSON());
    // get model with id `some-id`
    console.log(this.get('some-id'));
    // get models data where property `id_str` equals to `292724698935070722`
    console.log(this.where({id_str:'292724698935070722'}));
});

更多信息请看这里: http ://backbonejs.org/#Collection

于 2013-01-25T19:51:09.387 回答
3

我认为 Vitaliys 的回答有点危险,因为传递的选项{context: collection}是:

  • a) 在主干文档中未提及
  • b) 当 fetch 触发一些 Ajax 调用时,在 jQuery 中进行深入处理。

success-相反,可以在 fetch 的anderror-回调中轻松检查获取的集合的长度,例如:

someCollection.fetch({
    success: function(collection) { // the fetched collection!
        if (collection.length) {
            // not empty
        } else {
            // empty
        }
    }
});

请参阅http://backbonejs.org/#Collection-fetch

于 2014-02-18T13:44:40.527 回答