将消息附加到聊天框

时间:2016-03-18 08:42:40

标签: javascript jquery firebase

因此,我目前正忙于使用聊天框,该聊天框会将所有邮件存储在Firebase中,并立即将邮件附加到邮箱中。问题是Firebase按特定顺序获取消息,我以某种方式附加到聊天框,当我刷新它时,它又是不同的。

function init_chatbox() {
    $('.empty-chat').show();
    ref.child("/chatboxes/{{ chatbox.pk }}/messages/").on("child_added", function (snapshot) {
        $('.empty-chat').hide();

        var object = snapshot.val();
        var key = snapshot.key();
        var name = "";

        ref.child("/users/" + object['user_id'] + "/name").once('value', function(snapshot) {
            name = snapshot.val();

            var timestamp = object['timestamp'];
            var message = object['message'];

            extra_html = ' <a href="#/" class="remove" onclick="delete_message(\'' + key + '\')">(remove)</a><a href="#/" class="edit" onclick="load_modal(\'' + key + '\')">(edit)</a>';



            $('ul.chat-messages').append('<li class="' + key +'"><p class="author"><span>' + name + '</span><span></span><span class="time" data-livestamp="' + timestamp + '"></span>' + extra_html + '</p><p class="message">' + message + '</p></li>');
        });
    });

当我有这样的代码(使用.append)时,它立即显示如下代码:

Kevin 2 hours ago (remove)(edit)
some message here
John 10 minutes ago (remove)(edit)
test
John 2 minutes ago (remove)(edit)
msg
Kevin few seconds ago (remove)(edit)
test

当我刷新页面时,消息将位于顶部,就像订单一样。 这是事情,我也尝试.prepend,但它只是给了另一个,这也不对(将新消息发布在顶部,但刷新时显示良好的顺序,但随后是最新的消息在顶部)。

我希望有人可以帮助我,一直在努力解决这个问题

1 个答案:

答案 0 :(得分:0)

您应该查看firebase文档中的orderByChild()

基本上,您可以按时间戳对邮件进行排序。像这样:

ref.child("/chatboxes/{{ chatbox.pk }}/messages/")
   .orderByChild("timestamp")
   .on("child_added", function (snap) { ... });

时间戳最短的邮件将首先出现。