与此相关的问题在这里,有没有使用流星,这并不表明在客户中间结果(导致页面跳转左右)实现分页的习惯的方法.
我从排行榜示例中衍生出一个应用程序,实质上是在我使用的客户端上:
Template.scores.created = ->
Meteor.autosubscribe ->
Meteor.subscribe 'players', Session.get('page_size'), Session.get('current_page'), sortOrder()
Run Code Online (Sandbox Code Playgroud)
和服务器
Meteor.publish 'players', (page_size, current_page, sort) ->
Players.find({}, sort: sort, skip: (current_page-1)*page_size, limit: page_size)
Run Code Online (Sandbox Code Playgroud)
由于meteor订阅新数据然后删除旧数据的方式,所有新项目在删除旧项目之前会短暂显示,这会导致我想要摆脱的闪烁效果.
我能够实施一个目前足够好的解决方法。这并不是很好,因为它确实会导致一些少量的“闪烁”,但假设客户端和服务器运行速度很快,这是可以接受的。
解决方案主要是将模板帮助程序代码更改为:
Template.scores.players = ->
return Players.find({}, sort: sortOrder())
Run Code Online (Sandbox Code Playgroud)
到:
Template.scores.players = ->
return Players.find({}, sort: sortOrder()).fetch().slice(0,Session.get('page_size'))
Run Code Online (Sandbox Code Playgroud)
这将项目的客户端视图限制为页面大小的最大值,以便在删除旧项目之前到达客户端的其他项目不会扩大正在查看的项目列表的整体大小。
当项目到达和消失时,仍然会产生一些“闪烁”,但是由于列表的大小没有改变,它并不像没有切片的实现那么糟糕。