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

相關問題