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;
});
});
}