2014-11-06 1 views
0

Mongodb 데이터베이스에서 반환 된 개체 컬렉션을 반환하고 반환 된 모델 수를 찾고 반복을 통해 반복하고 일부 DOM 요소를 만들 수 있습니다. 그. 나는 Backbone.View를 사용하지 않고 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가 ({추가 : 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] 등

컬렉션을 잘못 검색합니까? 아니면보기를 만들지 않고 실제로 할 수 없습니까?

답변

0

Underscore.js 함수가 도움이 될 것입니다. 컬렉션의 모델로 무엇을하고 싶은지 확실치 않지만 http://underscorejs.org/을 확인하십시오. 백본 컬렉션을 처리 할 수있는 방법이 많이 있습니다. 예를 들어 당신이

_.toArray(_bookCollection).length 
2

Collection.fetch가 비동기 할 수있는 사용자의 데이터를 즉시 사용할 수 없습니다. 당신의 콜백이 설정되면

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

, 당신은 정장 당신 렌더링의 어떤 방법을 사용할 수 있습니다

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

또는 백본에서 제공하는 이벤트 : 당신이 중 하나 fetch에 의해 반환 약속을 사용해야합니다.

보너스 : why console.log tripped you

+0

'동기화'에 대해 알려 주셔서 감사합니다. 한 번에 하나 이상의 속성을 선택하여 각 모델의 값을 얻을 수 있습니까? – Pandafinity

+0

나는 당신이 원하는 것을 이해하는지 모르겠습니다. 예를 들어'Collection.toJSON'을 사용하여 모든 모델을 직렬화하거나 컬렉션 http : // backbonejs에서 프록시 된 Underscore 메서드를 사용할 수 있습니다.org/# Collection-Underscore-Methods – nikoshr

+0

Collection.toJSON을 시도하면 빈 상태가됩니다. 내가 본 것으로 질문을 업데이트했습니다. – Pandafinity