我正在使用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;
});
});
}
听起来您loadChatMessages()
每次进入房间都在运行,并且随着用户在房间中四处移动,您会看到对on('child_added'
回调的重复调用。
这是因为您每次重新输入房间时都会添加新的回叫。要解决此问题,请在用户离开房间时进行一些清理。在该清理功能中,请确保使用删除旧的侦听器.off("child_added")
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句