JS中的初学者Firebase:获取后续的k项

时间:2014-12-22 01:41:02

标签: javascript firebase

我有一个带有新闻项目的Firebase数据库,我们将在首页中一次显示10篇文章。我们希望按时间对这些文章进行排序,所以我们所做的就是按照这样的方式进入我们的firebase:

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())
 });

它仍然记录为null。我确信“新闻”数据库中至少有50个条目。所以我相信错误是在查询中。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

在使用辅助方法(例如startAt&}之前,您似乎需要订购数据。 endAt。这是因为startAt在某些属性上查找匹配项,而不是特定索引。即使您的文章中有某个日期或时间戳属性,并尝试orderByChild('time'),您也无法真正链接.startAt(page * 10)因为它会在时间属性上寻找匹配,这可能是也可能不是整数。

你可以做些什么来解决这个问题,有一些totalArticles变量在你存储新文章时会得到更新。然后,如果您为保存时与articleNumber所对应的每篇文章添加totalArticles属性,则可以orderByChild('articleNumber').startAt(page * 10).endAt(page * 10 + 10)

或者,似乎startAt的第二个参数可以是键或索引

点击此处了解详情:https://www.firebase.com/docs/web/api/query/startat.htmlhttps://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

编辑: 看看firebase博客上这篇精彩的文章,详细解释了这个问题,@FrankvanPuffelen提供: https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html