2014-11-06 41 views
0

我返回从Mongodb数据库返回的对象的集合,并且想要查找返回了多少个模型,并且能够遍历它们并基于它们创建一些DOM元素那。我没有使用Backbone.View,并将使用Famo.us.返回一个Backbone集合并迭代 - 而不是一个视图

我创建一个集合,并把它返回,但我似乎无法访问内部或他们的数据模型 - 知道你是否能帮助:)

这里是型号/系列:

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)' 将类似的东西返回:

在主文件I使用实例化集合

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({补充:真});”浏览器显示我有:

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

如果你展开它,它会告诉你的长度是250和“模型”(数组[250])有我在寻找,分成[00中的数据。 .99],[100..199]等。

我是在错误地检索集合还是不能真正做到这一点而不创建视图?

回答

0

Underscore.js函数应该很好地为您服务。我不确定你想要在集合中使用哪种模型,但检查出http://underscorejs.org/它有很多方法可以处理骨干集合。例如,你可以做

_.toArray(_bookCollection).length 
2

Collection.fetch是异步的,你的数据不会立即可用。你将不得不使用或者通过fetch返回的承诺:

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

或骨干提供的事件:

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

一旦你的回调被设置,你可以使用渲染适合你的任何手段。

奖励:why console.log tripped you

+0

谢谢你告诉我关于 '同步'。我可以一次“采摘”多个属性,以便获取每个模型的值吗? – Pandafinity 2014-11-06 15:36:35

+0

我不知道我明白你想要什么。您可以根据需要操作模型:例如,'Collection.toJSON'来获取所有序列化的模型,或者使用代理集合http:// backbonejs上的Underscore方法。org /#Collection-Underscore-Methods – nikoshr 2014-11-06 15:50:07

+0

如果我尝试Collection.toJSON,它会回来empty.I更新问题与我看到的 – Pandafinity 2014-11-06 16:25:17

相关问题