流星客户端分页

时间:2013-01-21 23:18:08

标签: meteor

有一个集合Comments。目前,针对特定Content的评论都已发布给客户。

没有分页我可以在我的模板中成功渲染它们,插入新的评论并享受反应。

我现在很好,发送给客户的所有评论,但我想实现全客户端分页,以便像FB那样直观地简化页面。

野兔是规则:

  • 注释始终按创建时间戳ASC(列表底部较新)
  • 排序
  • 我需要显示集合中的记录总数(T)
  • 我需要显示当前显示的评论总数(C)
  • 如果有更多评论(C
  • 最初我会显示5条最新评论(如果小于5条,则全部评论)
  • 新评论(从服务器推送)立即显示在列表的末尾
  • 当我点击“查看更多”链接时,最多有10条额外评论(最新的评论来自当前不可见 - 并且所有这些评论都比已经显示的更旧)显示在列表的开头

如此有效可能就像:

  • 拥有minTime变量
  • 最初将其设置为第5个最新评论的时间戳
  • 当我点击链接时将其设置为早于当前值的第10个最新评论的时间戳
  • 模板呈现的所有评论都不早于此值
  • 在某些时候计算值C和T并保存它们

我尝试用一​​堆Session变量来解决这个问题,但没有成功 - 我想在某些时候从模板中获取和设置这些变量会导致递归或者什么? 另外一个问题是我不能可靠地知道第一次计算minTime时的“初始”时刻 - 第一次创建或渲染模板时,评论可能仍然无法同步。 / p>

所以,问题是:满足我要求的正确方法是什么?

2 个答案:

答案 0 :(得分: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);
    }
});

答案 1 :(得分:0)

与此同时,还有两个用于客户端分页的Meteor软件包,一个在表格中。我承认我没有完全满足您的所有要求,因为与上面的ram1进行了评论交流,但该套餐可能有所帮助:

https://atmosphere.meteor.com/package/reactive-table

https://github.com/alethes/meteor-pages