2014-12-22 2 views
2

뉴스 항목이있는 Firebase 데이터베이스가 있습니다. 우리는 한 번에 10 개의 기사를 앞 페이지에 표시 할 것입니다.JS 초급 Firebase : 후속 k 항목 얻기

myDataRef.child("News/").push(json); 

는 우리가 지금하고 싶은 것은 사용자가 다음 버튼을 클릭하면하는 기능이있다 : 우리는과 같이 우리의 중포 기지 심판에 밀어 그래서 우리는 일을 한 모든입니다, 시간별로 정렬이 기사를 갖고 싶어 10 개의 후속 기사가 데이터베이스에서로드됩니다. 필자는 현재 페이지 번호를 올바르게 유지하는 page라는 변수를 늘려서이 작업을 수행 할 것을 고려했습니다.

쿼리 자체는 문제가 발생합니다. Snapshot.val()은 항상 null 인 것 같습니다.

 myDataRef.child("News").startAt(page*10).endAt(page*10+10).once('value',function(snapshot){ 
      console.log(snapshot.val()) 
     }); 

내가 쿼리를 변경할 경우에도 하드 코딩을 할 수 있습니다 :

myDataRef.child("News").startAt(0).endAt(10).once('value',function(snapshot){ 
      console.log(snapshot.val()) 
}); 

는 아직도 널을 기록합니다. 나는 "뉴스"DB가 적어도 50 개의 항목을 가지고 있다고 확신합니다. 그래서 나는 실수가 질의에 있다고 확신합니다.

도움을 주시면 감사하겠습니다.

+0

이 질문과 대답은 잠시 뒤로 어떻게 작동했는지보십시오. http://stackoverflow.com/questions/16628362/pagination-in-application-which-use-firebase-com-as-database. 새로운 'orderBy ...'메소드를 사용하는 경우에도 작업은 매우 유사하게 유지됩니다. 사용자가 보여준 마지막 항목을 기억하고 다음 페이지에서부터 시작합니다. "연속적으로 증가하지만 반드시 순차적이지는 않지만 연속적으로"키를 사용했다면 (Firebase가'push '를 호출 할 때 생성하는 키와 같이) 완벽하게 작동합니다 :'startAt'는 현재 키가 삭제 된 경우 다음 키를 반환합니다 . –

+0

[안내서] (https://www.firebase.com/docs/web/guide/)를 읽고 이러한 모든 기본 사항을 숙지하는 것이이를 이해하기위한 훌륭한 입문서가 될 것입니다. – Kato

답변

1

도우미 메서드 (예 : startAt & endAt)를 사용하기 전에 데이터를 주문해야하는 것 같습니다. startAt은 특정 인덱스가 아닌 특정 속성에서 일치하는 항목을 찾기 때문입니다. 기사에 날짜 또는 타임 스탬프 속성이 있어도 orderByChild('time')을 시도해도 .startAt(page * 10)을 연결할 수는 없습니다. 이는 정수가 될 수도 있고 그렇지 않을 수도있는 time 속성과 일치하는 항목을 찾을 수 있기 때문입니다.

이 문제를 해결하기 위해 할 수있는 일은 새로운 기사를 저장할 때마다 업데이트되는 일부 totalArticles 변수입니다. 그럼 당신은 당신이 다음 orderByChild('articleNumber').startAt(page * 10).endAt(page * 10 + 10)

또는, 키 또는 인덱스

될 수 startAt에 두 번째 매개 변수처럼 보인다 수 totalArticles 절약의 당시 무엇에 해당하는 각 기사에 articleNumber 속성을 추가하는 경우 자세한 내용은 여기를 참조하십시오 https://www.firebase.com/docs/web/api/query/startat.htmlhttps://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

편집 : 체크 아웃 세부에서이 문제를 설명 중포 기지의 블로그에이 멋진 포스트, @FrankvanPuffelen의 의례 : https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html

+0

좋은 해결 방법 인 것 같지만 기사를 삭제하면 어떻게됩니까? – Blessoul

+1

Firebase와 같은 동적 인 실시간 데이터베이스에서 완벽하게 순차적 인 키에 의존해서는 안됩니다. 여러 사용자가 동시에 항목을 추가하게되면 병목 현상이 발생합니다.파이어베이스의'push' 메소드는 배열과 같은 유스 케이스에 이상적으로 적합한 키를 생성하며'startAt'와'endAt'를 완벽하게 사용합니다. 또한 예 : https://www.firebase.com/blog/2013-10-01-queries-part-one.html#paginate에 대한이 기사를 참조하십시오. 'orderBy ... '메소드를 선행한다는 점을 염두에 두어 더 많은 옵션을 제공한다. –

+1

카토의이 기사는 배열에 관한 Firebase의 추론에 대해 설명합니다 : https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html –