返回Backbone集合并迭代 - 而不是View

时间:2014-11-06 14:32:08

标签: backbone.js backbone-collections

我正在返回从Mongodb数据库返回的对象集合,并希望找到返回的模型数量,并能够遍历它们并基于此创建一些DOM元素。我没有使用Backbone.View,将使用Famo.us。

我创建了一个集合并将其返回但是我似乎无法访问里面的模型或他们的数据 - 想知道你是否可以提供帮助:)

这是Model / Collection:

define( function (require, exports, module) {
  'use strict';

  var Backbone = require('backbone');

  var Book = Backbone.Model.extend({
    idAttribute: "_id"
  });

  var BookCollection = Backbone.Collection.extend({
    model: Book,
    url: "http://localhost:3000/api/books"
  });
  module.exports = BookCollection;
});

在主文件中,我使用:

实例化集合
    this._bookCollection = new BookCollection();
    this._bookCollection.fetch({reset: true});

    var _bookCollection = this._bookCollection;
    console.log(_bookCollection);
    console.log(_bookCollection.length);

'console.log(_bookCollection)'将返回类似于:

的内容
n {length: 0, models: Array[0], _byId: Object, constructor: function, model: function…}
_byId: Object
length: 250
models: Array[250]
[0 … 99]
[100 … 199]
[200 … 249]
length: 250
__proto__: Array[0]
__proto__: s

所以我知道它会返回一些内容,因为我期待返回250个'模型'。因为它不是一个真正的数组 - 你不能做_bookCollection.length(它对我不起作用)。我如何迭代返回的内容,以便我可以获得每个模型,然后对该模型“做”某些事情?我正在使用Famo.us,所以想要创建一个Backbone.View以外的东西。

由于

- 更新

在“this._bookCollection.fetch({add:true});”之后浏览器显示我有:

 {length: 0, models: Array[0], _byId: Object, _events: Object, constructor: function…}_byId: Object_events: Objectlength: 250models: Array[250]__proto__: n

如果展开它,它会告诉你长度为250,在'models'(数组[250])中有我要查找的数据,分为[00..99],[100..199]等

我是否错误地检索了该集合,或者在没有创建视图的情况下我是否真的这样做了?

2 个答案:

答案 0 :(得分:2)

Collection.fetch是异步的,您的数据不会立即可用。您必须使用fetch返回的承诺:

_bookCollection.fetch({reset: true}).then(function() {
    console.log(_bookCollection.length, _bookCollection.pluck('_id'));
});

或Backbone提供的事件:

_bookCollection.on("sync", function() {
    console.log(_bookCollection.length, _bookCollection.pluck('_id'));
});
_bookCollection.fetch({reset: true});

设置回调后,您可以使用任何适合您的渲染方式。

奖金:why console.log tripped you

答案 1 :(得分:0)

Underscore.js函数应该很好。我不确定你想对集合中的模型做什么,但查看http://underscorejs.org/它有很多方法可以处理骨干集合。例如,你可以做

_.toArray(_bookCollection).length