2013-05-31 2 views
0

나는 현재 지속성을위한 백엔드 솔루션으로 Firebase을 사용하기 시작했습니다. 백본 Firebase 컬렉션을 반복하는 방법은 무엇입니까?

나는 쉽게 새로운 객체를 생성하고 내가 서버에서 중포 기지 수집을 얻으려고 할 때 문제가 온다 간단한

collection.add(obj) 

와 백 파이어와 중포 기지에 계속 발견. 내가하려고 예를 들어

console.log(collection); 

내가이 출력 얻을 : 일부 검색 후 빈 모델 배열

console.log(collection.models); 
=> [] 

결과

=> {length: 0, models: Array[0], _byId: Object, _events: Object, constructor: function…} 

을, 나는 백본 컬렉션은 때로 믿을 수 있다고 생각 콘솔에 로그온하려고 할 때 아직로드되지 않았습니다 (see this previous question).

는 또한 서버에서

Backbone.Collection.extend({ 
    model: Todo, 
    firebase: new Backbone.Firebase("https://<your-namespace>.firebaseio.com") 
}); 

explicitly으로 전화 fetch를 사용하거나 성공하지 성공 콜백을 사용했습니다.

내 질문 : Firebase Collection을 가져 와서 DOM을 채우려면 어떻게해야합니까?

답변

2

Backbone.Firebase.Collection.add을 호출하면 컬렉션에 동 기적으로 추가되지 않습니다. 오히려 Firebase에 요청을 보낸 다음 반환 이벤트를 기다립니다. See the code here

따라서 컬렉션을 즉시 읽으려고하면 0 개의 요소가 표시됩니다. 그러나 다음과 같이하면 :

collection.once('add', function() { console.log(collection.length); }); 

추가 한 요소가 표시됩니다.

여기서 실시간 데이터를 다루므로 DOM을 채우려는 경우 하나의 트랜잭션을 고려하지 말고 대신 이벤트에 의존하고 모든 것을 가져 가야합니다 (실시간).

그래서, DOM을 채우는보기에 이런 식으로 뭔가를 할 수 :

Backbone.View.extend({ 
    render: function() { 
     this.listenTo(this.collection, 'add', this.rowAdded); 
    }, 

    rowAdded: function(m) { 
     /* use `m` here to create your new DOM element */ 
    } 
}); 

또한, 당신은 아마 당신이 끊임없이 변화하는 DOM을 처리하기 위해 ModelBinder 같은 좋은 바인딩 라이브러리를 체크 아웃 할 수 있습니다 그래서 바퀴를 다시 발명 할 필요가 없습니다.

+0

아주 좋은 대답 @ 카토, 고마워. 지금은 분명합니다. 하지만'add' 이벤트가 언제 발생하는지 이해하지 못합니다. 또한 'm'이 나타내는 것은 무엇입니까? 어떻게 사용할 수 있습니까? –

+1

요소가 컬렉션에 추가 될 때마다 add 이벤트가 발생합니다. Firebase가 새 레코드를 제공 한 후에 발생합니다 ([여기를보십시오] (https://github.com/firebase/backfire/blob/gh-pages/backbone-firebase.js#L268) 참조). 모든 콜렉션 이벤트는 콜백이 호출 될 때 영향받은 Backbone.Model (즉,'m')을 전달합니다. – Kato

1

당신이 Backbone.Firebase.Collection하지 fetch 또는 sync에 통화가 자동으로 무시되어 있음을 알려주는 Backbone.Collection를 사용해야 할 것 같다.

또한 Backbone.Firebase에는 readreadall 개의 시작 방법이 있습니다. Backbone.Firebase.Collection이이 방법을 상속하지 않는 것 같지만 확실하지 않습니다.

편집 : 카토 그의 의견에 명시된
으로, 당신은 아무것도 할 필요가 없습니다 것 같다. Backbone.Backfire.CollectionBackbone.Backfire.Model을 사용해주세요.

+0

동기화가 Backbone.Firebase.Collection에 함축되어 있습니다. 읽기 또는 readall이 필요 없습니다. 즉시 발생합니다. – Kato

+0

@Kato는 의사로부터 그렇게 생각했지만, 내가 Backfire의 코드에서 찾을 수는 없었습니다. 이제 Firebase의 코드에서 틀린 위치에서 검색하고 있다는 것을 알았습니다. – Loamhoof

+1

읽기는 (여기 'child_added' 호출을 통해) 이루어집니다. (https://github.com/firebase/backfire/blob/gh-pages/backbone-firebase.js#L183), 자동으로 즉시 모든 파일을 가져옵니다. 기록. – Kato

관련 문제