Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 返回主干集合并遍历-不使用视图_Backbone.js_Backbone.js Collections - Fatal编程技术网

Backbone.js 返回主干集合并遍历-不使用视图

Backbone.js 返回主干集合并遍历-不使用视图,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,我将返回一组从Mongodb数据库返回的对象,希望找到返回的模型数量,并能够遍历这些模型并在此基础上创建一些DOM元素。我没有使用主干。视图,将使用Famo.us 我创建了一个集合并将其返回,但我似乎无法访问其中的模型或它们的数据-不知您是否可以帮助:) 以下是模型/集合: define( function (require, exports, module) { 'use strict'; var Backbone = require('backbone'); var Book

我将返回一组从Mongodb数据库返回的对象,希望找到返回的模型数量,并能够遍历这些模型并在此基础上创建一些DOM元素。我没有使用主干。视图,将使用Famo.us

我创建了一个集合并将其返回,但我似乎无法访问其中的模型或它们的数据-不知您是否可以帮助:)

以下是模型/集合:

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,在“模型”(数组[250])中有我要查找的数据,分为[00..99]、[100..199]等


我是否检索到的集合不正确,或者如果不创建一个视图,我真的不能这样做吗?

underline.js函数应该可以很好地为您服务。我不确定您想对集合中的模型做什么,但请查看它有很多方法可以处理主干集合。比如你可以做什么

_.toArray(_bookCollection).length

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});
设置回调后,可以使用任何适合您的渲染方法


奖励:

感谢您告诉我有关“同步”的信息。我是否可以一次“提取”多个属性,以便获得每个模型的值?我不确定我是否理解您的要求。您可以按照自己的意愿操作模型:例如,
Collection.toJSON
来序列化所有模型,或者如果我尝试Collection.toJSON,则使用在集合上代理的下划线方法。它返回为空。我已经用我看到的更新了问题