2

Firebase を使用して HTML5 モバイル メッセージング アプリを開発しています。解決できない問題が発生しました。アプリには複数のチャネル (チャット ルーム) があります。メッセージがチャネルに初めて追加されたときは期待どおりに機能しますが、別のチャネルに移動してそのチャネルに新しいメッセージを投稿すると、前のチャネルに戻って別のメッセージを投稿すると、最後に投稿されたメッセージの重複が発生しますメッセージ。ページをリロードすると重複はなくなりますが、重複をまったく表示したくないのです。以下は私のコードです:

function loadChatMessages(channelID) {
    $('#chatMessages').html('');
    var msgObj = {};
    var channelRef = globals.channelsBase + '/' + channelID + '/messages';

    var channelMessages = new Firebase(channelRef);
    channelMessages.on('child_added', function (snapshot) {
        msgObj = snapshot.val();
        var id = snapshot.name().toString();

            var messageTime = application.Functions.renderTime(msgObj.messageTime);
            var tails = '<div class="message-tails-wrap"><div class="message-tails"></div></div>';
            var html = '<li class="chatEl ' + sentByClass + '" id="'+id+'">';
            html += tails;
            html += msgObj.message;
            html += '<span class="sender"> ' + by + ' </span> <span class="tmp-recipient"> ' + msgObj.recipient + ' </span>';
            html += '<span class="time-stamp msg-time" >';
            html += messageTime;
            html += '</span></li>';
            $(html).appendTo('#chatMessages');

        /// TODO: TEMP solution!
        var prevID = 0;
        $('#chatMessages li').each(function(n) {
            var id = $(this).attr('id');
            if(id == prevID){
               // console.log(id + ' is a duplicate. Remove it');
                this.remove(); // the necessary evil....                 
            }
            prevID = id;
        });

    });

}
4

2 に答える 2

1

行事 :

YOURREF.limitToLast(1).on('child_added', function (OBJECTADDED){
    console.log(OBJECTADDED.key(), OBJECTADDED.val());
});

上記のコードは 1 回実行されると思うかもしれませんが、これは正しくありません。上記の console.log は 2 回発生します。1 回目は参照 YOURREF の最後のオブジェクトとして OBJECTADDED を使用してから新しいオブジェクトを追加し、もう 1 回は新しいオブジェクトを使用します。

于 2015-05-10T02:47:22.153 に答える