如何在没有闪烁的情况下在Meteor中进行分页?

时间:2012-10-07 03:55:52

标签: javascript meteor

与此问题here相关,是否存在使用Meteor实现分页的惯用方法,该方法不会在客户端显示中间结果(导致页面跳转)。

我从排行榜示例中衍生出一个应用程序,实质上是在我使用的客户端上:

Template.scores.created = ->
    Meteor.autosubscribe ->
        Meteor.subscribe 'players', Session.get('page_size'), Session.get('current_page'), sortOrder()

服务器

Meteor.publish 'players', (page_size, current_page, sort) ->
    Players.find({}, sort: sort, skip: (current_page-1)*page_size, limit: page_size)

由于meteor订阅新数据然后删除旧数据的方式,所有新项目在删除旧项目之前会短暂显示,这会导致我想要摆脱的闪​​烁效果。

1 个答案:

答案 0 :(得分:3)

我能够实现一个现在足够好的解决方法。它不是很好,因为它会导致一些少量的“闪烁”,但假设客户端和服务器运行速度很快,它是可以容忍的。

解决方案主要是从:

更改模板助手代码
Template.scores.players = ->
    return Players.find({}, sort: sortOrder())

为:

Template.scores.players = ->
    return Players.find({}, sort: sortOrder()).fetch().slice(0,Session.get('page_size'))

这会将项目的客户端视图限制为最大页面大小,以便在删除旧项目之前到达客户端的其他项目不会扩展正在查看的项目列表的总大小。

当项目到达并消失时,仍然会出现一些“闪烁”,但是由于列表的大小没有改变,所以它没有没有切片的实现那么糟糕。