2016-06-08 160 views
0

我已經訂閱了流星的集合,並傳遞頁碼以允許分頁。 limit參數設置爲15,因此不應該返回超過15個文檔,但是當我切換頁碼時,訂閱會連續返回3個連續15次,30次和15次文檔。只有最後一個是正確的15.流星訂閱發送大量數據

因此,當表格數據增長到30行然後再次回到15時,UI會看到「閃存」。

我使用的UI反應並含有組分像這樣將數據傳遞作爲道具到呈現組件:

export default createContainer(props => { 

    // Get collection name from router/url and grab mongo collection 
    let collectionName = props.routeParams.collectionId; 
    let Collection = CollectionData(collectionName).collection; 

    // Get paged results based on URL query page 
    Meteor.subscribe(collectionName, props.location.query.page || 1); 

    return { 
     items: Collection.find({}, {sort: {createdAt: -1}}).fetch(), 
     total: Collection.find({}).count() 
    }; 

}, Collection); 

在呈現組件我更新路由器歷史狀態,改變頁面數像?page = 1。這會導致重新呈現,它將更新「props.location.query.page」的值,以允許訂閱數據發生更改。我不確定是否有更好的方法來改變分頁值。

的發佈代碼如下所示:

// Publish data 
if(Meteor.isServer) { 
    Meteor.publish(mongoCollectionName, function(page){ 
     if(page) { 
      let pageSize = 15; 
      page = parseInt(page)-1; 
      if(page < 0) page = 0; 
      return collection.find({}, {limit: pageSize, skip: page*pageSize}); 
     } else { 
      return collection.find({}); 
     } 
    }); 
} 

從我可以看到它似乎我的組件接收數據之前流星加盟15兩個數組,以使30個文檔的陣列,在某些時候。

回答

0

您可以使用模板級訂閱而不是全局訂閱來防止對同一數據進行多個訂閱,這可以解決您的問題。

裏面你onCreated函數模板調用this.subscribe("nameOfSub", params)其中nameOfCollection是您訂閱的名稱,而params是你。

使用通過{{Template.subscriptionsReady}}助手時,模板訂閱準備檢測任何PARAMS。

+0

我認爲這隻適用於大火?這怎麼能用反應來實現呢? – wazzaday