6

この質問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 が新しいデータをサブスクライブしてから古いデータを削除する方法により、古いアイテムが削除される前にすべての新しいアイテムが短時間表示されるため、ちらつき効果が発生しますが、これを取り除きたいと考えています。

4

1 に答える 1

3

今のところ十分な回避策を実装できました。少量の「ちらつき」が発生するため、それほど良くはありませんが、クライアントとサーバーが高速で実行されていると仮定すると、許容範囲内です。

解決策は、主に Template ヘルパー コードを次のように変更することでした。

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 に答える