我有聊天应用程序,我在里面加载了最后5条消息,就像这样
{{#if haseMoreMessages}}
<div class="loadmore text-center" id="incLimit">Load More</div>
{{/if}}
{{#each messages}}
{{> message}}
{{/each}}
messages: function(){
var messages = Messages.find({},{sort:{createdAt:1}}); // I can remove {sort:{createdAt:1}} and all ok, nut it's not fit
return messages;
},
haseMoreMessages:function(){
if (Session.get('messageLimit') > Messages.find().count()) return false;
return true;
}
Messages.find({room: Rooms.findOne({users : { $in : [this.userId]}})._id},{ sort: { createdAt: -1 } , limit : limitM});因此,当我编写新消息时,100 on或更多的消息显示在顶部,200 on或更多的消息显示在底部,例如:
-mes1
-mes2
-mes3
我写mes4
-mes4
-mes1
-mes2
-mes3
在一些ms之后
-mes1
-mes2
-mes3
-mes4
当我从{sort:{createdAt:1}}中删除var messages = Messages.find({},{sort:{createdAt:1}})时,所有的消息都显示为ok,没有延迟,但是当我单击“显示更多”按钮时,但是显示所有旧消息都显示在底部,但是它们必须显示在页面的顶层上。所以我需要{sort:{createdAt:1}}
你知道我能做什么吗?
发布于 2015-08-29 17:15:42
根据您的注释,插入发生在客户机上,但是createdAt字段仅在服务器上填充。因此,Meteor首先使用没有createdAt字段的本地数据库来显示插入结果。然后,在对服务器进行往返并对查询进行更新之后,按预期进行排序。
有两个选项:完全在服务器上插入,或者将createdAt字段附加到客户机上。
https://stackoverflow.com/questions/32288352
复制相似问题