2016-03-18 3 views
0

Так что я в настоящее время занят чатом, который хранит все сообщения в 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("https://stackoverflow.com/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, но он просто дает еще один, который тоже не прав (публикует новое сообщение сверху, но при обновлении он отображает хороший порядок, но затем самое последнее сообщение сверху) ,

Я надеюсь, что кто-то может мне помочь с этим, пытаются решить эту проблему

ответ

0

Вы должны взглянуть на orderByChild() в firebase документации.

В принципе вы можете заказать сообщения по их timestamp. Пример:

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

Сообщения с наименьшей отметкой времени придут первыми.

+0

Я действительно пробовал 'orderByChild()' в сочетании с '.append()', хотя он, кажется, остается неизменным (отображает правый порядок после обновления, добавляет новое сообщение в нижнее окно). Пробовал его с помощью .prepend() ', размещает новое сообщение сверху, но временную метку в неправильном порядке .. – dnsko

Смежные вопросы