20
// Snippet from Template
<div class="post-container">
  {{#each elements}}
    {{> post-element this}}
  {{/each}}
</div>

// Snippet from Client 
Meteor.subscribe('thePosts');

// Snippet from Server
Meteor.publish('thePosts', function(){
  return Posts.find({},  {sort:{createdAt:-1}, reactive:true});
});

私がする時...

Posts.insert({body:postBody, createdAt: new Date()});

公開関数で指定された降順ではなく、投稿ドキュメントが追加され、リストの最後に表示されます。私が間違っていることについて何か考えはありますか?

ありがとう!

4

2 に答える 2

49

公開機能は、サブスクライブしているクライアントの mini-mongo データベースに同期する必要があるレコードを決定します。そのため、パブリッシュ関数でデータを並べ替えても、実際にはクライアントには影響しません。クライアント側のデータベースが別の方法でデータを保存する可能性が高いためです。

もちろんfind、レコードの数を最新の N 個に制限するためにパブリッシャーで並べ替えを使用することもできます。クライアント。

レコードがクライアントに同期されたら、結果の表示方法を決定するのはテンプレート コードです。例えば:

Template.myTemplate.elements = function() {
  return Posts.find({}, {sort: {createdAt:-1}});
}

よくある間違いに関する私の投稿の「ソートされた公開」セクションも参照してください。

于 2013-03-01T17:55:06.563 に答える
4

テンプレート ヘルパー コードを投稿していません。

ヘルパー関数から実行する場合return Posts.find()、クエリには次のように並べ替え引数も含める必要があります。

Template.myTemplate.elements = function(){
   Meteor.subscribe('thePosts');
   return Posts.find({},  {sort:{createdAt:-1}, reactive:true});
}
于 2013-03-01T13:53:12.350 に答える