尝试做一个无限滚动页面,在用户滚动时显示元素。
因此,每当我检测到滚动到达页面末尾时,我就会调用
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()
一个h.stop()
之后停止订阅,这是有效的...我猜以前的芒果光标是用最后一个订阅限制更新的。
然而,我仍然无法理解为什么这会在最初的情况下重新粉刷所有东西..
答案 0 :(得分:1)
我相信问题是你在猜测时再次找到文件。您只应在自动运行中订阅您的出版物。从Angular2&amp; amp;查看this Meteor教程很好地解释了pub / sub。
在自动运行中,它将重新运行find()
并重新渲染所有文档,这就是为什么您需要在自动运行中仅为您的情况重新运行订阅的原因。由于pub / sub和观察者的工作方式,因为你唯一改变的是你的函数中的“限制”,其余的是相同的,你的发布只返回新文档,并保留以前返回的文档。客户端的find()
查询将获取pub / sub返回的文档,当文档数量发生变化时,它不会重新呈现已获取的文档。