使用Firebase实现无限滚动?

Chr*_*s W 5 javascript firebase firebase-realtime-database

      var self = this;
      var firebaseRef = new Firebase(baseUrl + '/sparks');

      firebaseRef.limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) {
        self.addChild(childSnapshot); // adds post to a <div>
      });
Run Code Online (Sandbox Code Playgroud)

数据库布局

我的代码目前加载了最后5个帖子,并将加载任何新帖子.但是,我也希望能够加载旧帖子.我有一个按钮,当点击它将调用一个功能(我不知道如何实现)加载旧帖子.如何检索这些较旧的帖子?

(箭头只表示我想从底部开始检索帖子并一直向上移动到顶部)

Fra*_*len 10

你需要稍微考虑一下这样做.当您获得第一页的查询结果时,请记住结果中的第一项:

firebaseRef.endAt().limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) {
    self.addChild(childSnapshot); // adds post to a <div>
  });
Run Code Online (Sandbox Code Playgroud)

虽然您无法通过Firebase索引访问子项,但您可以存储项的键并使用它来开始下一个查询.

var firstKnownKey;
firebaseRef.orderByKey().limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) {
    if (!firstKnownKey) {
      firstKnownKey = childSnapshot.key;
    }
    self.addChild(childSnapshot); // adds post to a <div>
});
Run Code Online (Sandbox Code Playgroud)

现在你有一个变量firstKnownKey,它有你见过的第一个键.要获取上一批子项,您可以endAt()在启动下一个查询时将该值传递给:

firebaseRef.orderByKey().endAt(firstKnownKey).limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) {
    if (!firstKnownKey) {
      firstKnownKey = childSnapshot.key;
    }
    self.addChild(childSnapshot); // adds post to a <div>
});
Run Code Online (Sandbox Code Playgroud)

过去几天类似问题的答案: