我正在使用Firebase開發HTML5移動消息應用程序。我遇到了一個我無法解決的問題。該應用程序有多個頻道(聊天室)。當第一次向某個頻道添加消息時,它會按預期工作,但當我轉到其他頻道並向該頻道發佈新消息時,我會返回到上一個頻道併發布另一條消息,我會得到上次發佈的副本信息。當我重新加載頁面時,重複項已不存在,但我寧願不顯示重複項。下面是我的代碼:Firebase child_added創建重複項目
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;
});
});
}
我會設置一個斷點或添加一個console.log以確保您的.on('child_added',...)調用不會多次運行。 –
感謝您的建議。我已經嘗試過了。 on('child_added,...)在通道首次加載時被多次調用,然後一次添加新消息。這是預料之中的。當我將消息添加到不同的頻道然後加載我的上一個頻道時,問題就開始了。然後,當我在('child_added,...)上添加新消息被調用兩次。 – thmr
是的,那是因爲.on(「child_added」)被調用兩次。在爲新頻道添加新監聽器之前,您需要確保調用.off(「child_added」)。 – Anant