Closed SinanWang closed 8 years ago
如果数据集不是静态的,而是不断在插入和删除的,那么分页中页码的定义会变的很麻烦。
如果数据是只写入而没有删除操作,那么分页的实现比较简单,主要有两种方法:
在写入数据的时候,使用priority做为数据的页码。
// 读取第2页数据new Wilddog("https://examples-sql-queries.wilddogio.com/messages") .orderByPriority() .startAt(2) // .endAt(2) .once('value', function(snap) { console.log('messages :', snap.val()); });
参考自增字段。 假设我们为列表数据中的每一条记录都生成了一个自增的字段,就可以计算其页码了。
var startId = (pageNo - 1) * pageSize + 1;var endId = startId + pageSize;new Wilddog("https://examples-sql-queries.wilddogio.com/messages") .orderByChild('id') .startAt(startId) // .endAt(endId) .once('value', function(snap) { console.log('messages :', snap.val()); });
如果数据不是append only的,最好的做法是标记上一页取到的最后一条数据,从这一页开始取(适用于上拉加载数据)。
// 加载下一页数据new Wilddog("https://examples-sql-queries.wilddogio.com/pagination") .startAt(null, lastKeyOnPrevPage) .limitToFirst(LIMIT+1) // 多取一条,因为上一页的最后一条记录会被取出来,需要排除掉 .once('value', function(snap) { var vals = snap.val()||{}; delete vals[lastKeyOnPrevPage]; // 排除上一页最后一条记录 console.log('on this page', vals); });
问题已经解决
如果数据集不是静态的,而是不断在插入和删除的,那么分页中页码的定义会变的很麻烦。
如果数据是只写入而没有删除操作,那么分页的实现比较简单,主要有两种方法:
使用priority作为页码
在写入数据的时候,使用priority做为数据的页码。
为数据生成自增字段
参考自增字段。 假设我们为列表数据中的每一条记录都生成了一个自增的字段,就可以计算其页码了。
依靠上一页的最后一条记录获取下一页数据
如果数据不是append only的,最好的做法是标记上一页取到的最后一条数据,从这一页开始取(适用于上拉加载数据)。