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()停止订阅,这是可行的……我猜以前的芒果光标已更新为最后的订阅限制。

但是我仍然无法理解为什么这会在最初的情况下重新绘制所有内容..

4

1 回答 1

1

我相信问题是您正在再次找到您猜测的文件。您应该只在自动运行中订阅您的出版物。从 Angular2 和 Meteor 教程中检查这个,它很好地解释了 pub/sub。

在自动运行中,它会重新运行find()并重新渲染所有文档,这就是为什么您只需要在自动运行中为您的案例重新运行订阅。由于 pub/sub 和观察者的工作方式,由于您唯一更改的是函数中的“限制”,其余部分相同,因此您的发布将仅返回新文档,并保留先前返回的文档。客户端的find()查询将获取从 pub/sub 返回的文档,当文档数量发生变化时,它不会重新呈现已经获取的文档。

于 2016-10-11T10:02:40.100 回答