2013-01-21 185 views
1

有一個集合Comments。目前針對特定Content的評論均發佈給客戶。流星客戶端分頁

沒有分頁我可以在我的模板中成功渲染它們,插入新評論並享受反應。

我很好,現在發送給客戶端的所有評論,但我想實現所有客戶端分頁,以可視化簡化頁面很像FB。

野兔是規則:

  • 評論總是被創建時間戳ASC
  • 我需要顯示的集合中記錄的總數(在列表的底部新)排序(T )
  • 我需要顯示當前顯示的評論數目(C)
  • 如果有更多的意見(C < T)我需要顯示「查看更多」鏈接
  • 起初我展示5最新評論(或所有人如果少於5)
  • 新評論(從服務器推送)即時顯示在列表的末尾
  • 當我點擊'查看更多'鏈接到10額外的意見(從目前看不到最新的 - 而所有這些都是舊的,那些已經顯示)在列表的開頭顯示

所以有效也可能是這樣的:

  • minTime變量
  • 最初將其設置爲5日最新評論的時間戳
  • 當我點擊鏈接將其設置爲10日最新評論比當前值更舊的時間戳
  • 模板處理所有的意見不低於該值年長
  • 在某些時候計算值C和T,並將其保存

我試圖用一堆Session變量來解決這個問題,但沒有成功 - 我認爲在某些時候獲取和設置從這些瓦爾模板導致遞歸或什麼? 另外一個問題是,我不能可靠地知道第一次計算minTime的'初始'時刻 - 當模板第一次創建或呈現時,評論可能仍不會同步。

那麼,問題是:滿足我的要求的正確方法是什麼?

+2

什麼是你的問題? – Rahul

+0

顯然:如何做到這一點,使其工作 – Guard

回答

1

解決方案:

Meteor.startup(function(){ 
    Session.set('number_of_visible_comments', 5); 
}); 

Template.comments = function() { 
    return Comments.find({content: id_of_content}, { 
     sort: {timestamp: -1}, 
     limit: Session.get('number_of_visible_comments') 
    }); 
}; 

Template.total_number_of_comments = function() { 
    return Comments.find({content: id_of_content}).count(); 
}; 

Template.number_of_visible_comments = function() { 
    return Session.get('number_of_visible_comments').count(); 
}; 

Template.comments.events({ 
    'click': function() { 
     var count = Session.get('number_of_visible_comments') + 10; 
     Session.set('number_of_visible_comments', count); 
    } 
}); 
+0

我已經完成了這一點,但它不是我的問題的確切答案。在此解決方案中,當新評論到達時,最舊的_currently visible_ comments消失 – Guard

+0

此代碼將顯示評論最新到最舊評論,同時我們希望最新評論在最底部。這可以通過在遊標上執行'.fetch()'然後在結果上執行'return _.sortBy'來解決,但是當你返回除遊標以外的東西時,整個模板將在集合更新 – Guard

+0

上被重新渲染以改變排序方向,只需將-1設爲正值1.以防止最新的評論在新的評論進入時消失,請使用$或$使其限制或時間戳比較。 – ram1