2016-10-08 12 views
4

ユーザーがスクロールするときに要素を表示する無限スクロールページを実行しようとしています。Angular2 Meteor、無限スクロールを実装する(スクロールを上にスクロールする)

だから私は、スクロールは私が

this.recordLimit += 10; 
this.subscribe('movements', {limit: this.recordLimit}); 

とtriggeres(オートラン)

 this.autorun(h => { 
      if (this.ready()) { 
       this.items = Items.find(<potential limit filter here too>); 
      } 

すべての権利ことを呼び出しページの最後に達したことを検出するたびに。それは働いている。ただし、this.items = Items.find();が呼び出されるたびに、ユーザーのブラウザがスクロールして先頭に戻ります。

これは、dom要素が削除され、スクロールがリセットされ、以前のスクロール位置を復元せずに要素が再び追加されるためです。

私は間違っていますか?それが働いて 'apparenty' です

例:編集########### @

## ########## @

実際、私は、 Items.find()h.stop()は、サブスクリプションを停止するには、これは動作します...私は前回のマンゴーカーソルが最後のサブスクリプションの制限で更新されると思います。私はまだこれが最初のケースでは、すべてを再塗装された理由を理解することはできませんよしかし

..

答えて

1

私はこの問題は、あなたが推測として再度文書を見つけることだと考えています。あなたはautorunで自分のパブリケーションを購読する必要があります。 thisをAngular2からチェックしてください& pub/subについてよく説明しているMeteorチュートリアル。

自動実行では、find()を再実行し、すべてのドキュメントを再レンダリングします。なぜなら、自動的にサブスクリプションのみを再実行する必要があるからです。 pub/subとobserverがどのように機能するのかによって、変更するのは関数の "制限"で残りは同じなので、新しい文書のみを返し、以前に返されたものは保持します。クライアント側のfind()クエリは、pub/subから返されたドキュメントをフェッチし、ドキュメントの量が変化したときに既にフェッチされたドキュメントを再レンダリングしません。

+0

私はあなたの出版物を購読してください、より正確には "should"と "only"を理解できません。オートランの中でどのように購読するのが良い習慣であるか、または必須ですか? – ATX

+0

@ATXそれはオブザーバーの働きによるものです。 20ページの文書をスクロールして返し、40に制限を変更した場合、自動実行で登録して自動実行ではない文書を返すと、以前に取得した20の文書を再レンダリングしません。私はボタンのクリックや無限のスクロールのための同じ機能を持っています。 – Luna

+0

@ATXこれをより明確にするために、購読者はアプリケーションをクライアント側に返します。アプリケーションの特定の場所ではなく、クライアント側で使用できるようにします。したがって、あなたは制限を変更するので、購読を自動実行します。パブリッシュはクエリを取得し、唯一の変更は制限であるため、XX以上のドキュメントを返します。制限を変更する前に既にxxドキュメントを持っていて、オートランの中でそれらを返さないので、それは必要な機能を果たし、なぜそれが「正しい」練習であるのか – Luna

関連する問題