2012-10-07 11 views
6

この質問に関連するhereには、中間結果をクライアントに表示しないメテオを使用してページネーションを実装する慣用的な方法があります(これにより、ページが飛び跳ねる)。流星のちらつきなしでページ分割を行う方法は?

私は、クライアント上で、私はこの使用しています、本質的には、リーダーボードの例からアプリを得てきました。原因道に

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) 

をその流星が加入新しいデータを削除してから古いデータを削除すると、古いアイテムが削除される前にすべての新しいアイテムが一時的に表示され、消したいちらつき効果が発生します。

+0

これは回避策ですが、置き換えるのではなく、データを追加することができます(InfiniteScrollのような)? –

+0

どのようにプレイヤーリストをレンダリングしますか?テンプレートヘルパーや 'Meteor.renderList'? – Andreas

+0

@テイラーあなた自身の答えを受け入れることができます:) – Rahul

答えて

3

私は今のところ十分な回避策を実装することができました。それはいくつかの "ちらつき"の少々の量につながるが、それはクライアントとサーバーが高速で実行されていると仮定して合理的に許容されるので、それは素晴らしいことではない。追加のように、これは、ページサイズの最大アイテムのクライアント・ビューを制限

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

:に

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

溶液からテンプレートヘルパー・コードを変更する主ました古いアイテムが削除される前にクライアントに到着したアイテムは、表示されているアイテムのリストの全体サイズを拡張しません。

リストのサイズがスライスなしの実装ほど悪くないので、アイテムの到着と消滅に伴って結果が生じる「フリッカー」がまだあります。

+0

なぜ取ってスライスし、スキップして制限しないのですか? – Mitar

関連する問題