2013-01-21 65 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