4

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

したがって、スクロールがページの最後に達したことを検出するたびに、呼び出します

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

そしてそれがトリガーされます(自動実行)

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

わかった。それは働いています。ただし、 が呼び出されるたびthis.items = Items.find();に、ユーザーのブラウザは一番上までスクロールされます。

これは、dom 要素が削除され、スクロールがリセットされ、要素が以前のスクロール位置を復元せずに再度追加されたことが原因である可能性があります。

私は何を間違っていますか?

「見かけ」が機能している例:

@########### 編集 ############@

Items.find()実際、 a の後にサブスクリプションを停止すると、これが機能することに気付きましたh.stop()...前の mango カーソルは、最後のサブスクリプション制限で更新されていると思います。

ただし、最初のケースでこれがすべてを再描画していた理由をまだ理解できません..

4

1 に答える 1

1

問題は、ご想像のとおり、再びドキュメントを見つけていることだと思います。自動実行でのみパブリケーションを購読する必要があります。パブ/サブをかなりよく説明している Angular2 & Meteor チュートリアルからこれを確認してください。

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

于 2016-10-11T10:02:40.100 に答える