我有聊天应用,我在其中加载了最后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});
所以当我写新消息时,它显示在100ms或更长时间,它显示在顶部,在200ms或更长时间后显示在底部,例如:
- mes1
- mes2
- mes3
我写mes4
- mes4
- mes1
- mes2
- mes3
经过一些ms
- mes1
- mes2
- mes3
- mes4
当我从{sort:{createdAt:1}}
中移除var messages = Messages.find({},{sort:{createdAt:1}})
所有节目都没问题,没有延迟,但当我点击显示更多按钮时,所有旧消息显示在底部,但它们必须显示在页面的 TOP 。这就是为什么我需要{sort:{createdAt:1}}
所以我知道我该怎么做?
答案 0 :(得分:0)
根据您的评论,插入发生在客户端上,但createdAt
字段仅填充在服务器上。因此,Meteor首先使用没有createdAt
字段的本地数据库来立即显示插入的结果。然后,在往返服务器并更新到查询之后,排序按预期进行。
两个选项:完全插入服务器上,或者附加客户端上的createdAt
字段。