6

与这里的这个问题相关,是否有一种使用 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)

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

4

1 回答 1

3

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

解决方案主要是从以下位置更改模板帮助程序代码:

Template.scores.players = ->
    return Players.find({}, sort: sortOrder())

至:

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

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

随着项目的到达和消失,仍然会产生一些“闪烁”,但是由于列表的大小没有改变,它并不像没有切片的实现那么糟糕。

于 2012-10-13T04:08:28.103 回答