使用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个模型。我不知道如何获得它们的数量。
答案 0 :(得分:11)
是的,这是一种奇怪的行为:)
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
答案 1 :(得分:3)
我认为Vitaliys的答案有点危险,因为传递的选项{context: collection}
是:
相反,可以在fetch的success-
和error-
回调中轻松检查获取的集合的长度,例如:
someCollection.fetch({
success: function(collection) { // the fetched collection!
if (collection.length) {
// not empty
} else {
// empty
}
}
});