gpt4 book ai didi

Firebase child_added 创建重复项

转载 作者:行者123 更新时间:2023-12-02 08:38:21 25 4
gpt4 key购买 nike

我正在使用 Firebase 开发 HTML5 移动消息传递应用程序。我遇到了一个我无法解决的问题。该应用程序有多个 channel (聊天室)。当一条消息第一次添加到一个 channel 时,它按预期工作,但是当我转到另一个 channel 并向该 channel 发布一条新消息时,我返回到前一个 channel 并发布另一条消息,我得到了上次发布的副本信息。当我重新加载页面时,重复项消失了,但我不想让重复项显示出来。下面是我的代码:

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") 移除旧的监听器。

关于Firebase child_added 创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com