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 回答