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

それまでの間、クライアント側のページ付けを行うための2つのMeteorパッケージがあり、1つはテーブル内にあります。上記のram1とのコメント交換のため、すべての要件を満たしていないことは認めますが、パッケージが役立つ場合があります。

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

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

于 2014-02-27T05:22:54.907 に答える