2015-08-29 50 views
1

我聊天应用程序,我加载它最后5条信息,像这样做延迟排序:流星的js

{{#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以上它显示在顶部,和200毫秒或更长时间后它显示在底部,例如:

- mes1

- mes2

- mes3

我写mes4

- mes4

- mes1

- mes2

- mes3

经过一番ms

- mes1

- mes2

- mes3

- mes4

当我从var messages = Messages.find({},{sort:{createdAt:1}})删除{sort:{createdAt:1}}都显示正常,内部消除延迟,当我点击显示更多按钮,所有旧消息显示在底部,但它们必须显示在页面的TOP上。这就是为什么我需要{sort:{createdAt:1}}

所以任何想法我能做什么?

+0

你在哪里设置'createdAt'?在客户端还是在服务器上? –

+0

你的代码非常混乱,因为你没有说明它是如何分解成文件和客户端和服务器的。如果你解决了这个问题,它可以帮助我们帮助你。 –

+0

createAt在服务器上,你需要哪部分代码?我会显示它 – Qwe

回答

0

根据您的意见,插入发生在客户端,但createdAt字段只在服务器上填充。流星因此首先使用没有createdAt字段的本地数据库来立即显示插入的结果。然后,在往返服务器并更新查询之后,排序按预期发生。

两种选择:完全插入服务器,或者在客户端上附加createdAt字段。

+0

是的,做所有的服务器上,工作很好 – Qwe