Meteor中无限滚动实现的订阅行为

时间:2017-09-13 17:07:10

标签: javascript jquery meteor ecmascript-6 infinite-scroll

我已经使用Meteor 1.5.0实现了我自己的无限滚动版本。请考虑下面的订阅代码。

Template.App_ViewClients.onCreated(function(){  
    this.autorun(() => {
        Meteor.subscribe('Clients', this.total.get(), this.searchString.get());
    });
});

渲染模板时,默认情况下最初会提取20条记录。

每当我到达屏幕的末尾时,this.total会增加20。所以,首先向下滚动给我40条记录,然后是60条,依此类推。我必须使用this.autorun,因为searchString是来自UI的变量输入,数据必须更改。

以下是我使用的滚动码。

Template.App_ViewClients.onRendered(function(){
    $(window).scroll(function(event){
        if($(window).scrollTop() + $(window).height() == $(document).height()) {
          console.log('End Reached.');
        }
    });
});

如果我的Collection有1000条记录并且我已经滚动了10次(即20 * 10 = 200条记录被提取),那么订阅会重置并在我的第11个滚动到底部再次获取220条记录吗?因此,在第50个滚动到底部,重置整个订阅并一次取出1000条记录?

  

如果是这种情况,那么如何在流星中实现无限滚动呢?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

不,订阅赢了"重置"并重新获取相同的数据。如果您将重新订阅相同的订阅但具有不同的limit选项,则发布将仅发送您在客户端上没有的文档。因此,每次滚动到屏幕的末尾并(由于此操作)重新订阅 - 发布将向客户端发送接下来的20条记录。

以下是一些有用的链接:

  1. Publication behavior when arguments change
  2. Paginating subscriptions