1

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

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

我现在可以将所有评论发送给客户端,但我想实现全客户端分页以在视觉上简化页面,就像 FB 一样。

野兔是规则:

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

如此有效地它可能是这样的:

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

我试图用一堆Session变量来解决这个问题,但没有成功——我认为在某些时候从模板中获取和设置这些变量会导致递归或什么?另一个问题是我不能可靠地知道我应该第一次计算的“初始”时刻minTime——第一次创建或呈现模板时,注释可能仍然没有同步。

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

4

2 回答 2

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);
    }
});
于 2013-01-22T15:33:57.657 回答
0

同时有两个 Meteor 包用于进行客户端分页,一个在一个表中。我承认由于上面与 ram1 的评论交换,我没有满足您的所有要求,但该软件包可能会有所帮助:

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

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

于 2014-02-27T05:22:54.907 回答