2017-09-13 28 views
1

我已經使用Meteor 1.5.0實現了我自己的無限滾動版本。考慮下面的一段訂閱代碼。流星中無限滾動實現的訂閱行爲

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

當模板被渲染時,最初默認獲取20條記錄。

每當我到達屏幕末尾時,this.total就會增加012說明。所以,首先向下滾動給我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.'); 
     } 
    }); 
}); 

如果我收藏有1000條記錄,我已經滾動10次(即20 * 10 = 200記錄牽強),所以會認購復位,在我11滾動到底一共再次讀取220個記錄?因此,在第50次滾動到底部時,整個訂閱被重置並且1000條記錄被一次性提取?

如果是這樣的話那麼怎麼可能在流星中實現無限滾動?有什麼想法嗎?

回答

1

不,訂閱不會「重置」並重新獲取相同的數據。如果您將重新訂閱相同的訂閱,但使用不同的limit選項,則發佈將僅發送客戶端沒有的文檔。因此,每次您滾動到屏幕末尾時(作爲此操作的結果),重新訂閱 - 出版物僅向接下來的20條記錄發送給客戶端。

以下是關於一些有用的鏈接:

  1. Publication behavior when arguments change
  2. Paginating subscriptions
+0

所以你的答案纔有效,如果我解決包滲濾液:發現 - 從出版物?或者它也適用於簡單的發佈 - 訂閱? –

+1

它適用於簡單的發佈/訂閱。 「percolate:從出版物中找到」包不是與此相關的。 – Styx