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;
});
});
}
중단 점을 설정하거나 .on ('child_added', ...) 호출이 여러 번 실행되지 않도록 console.log를 추가 할 수 있습니다. –
조언 해 주셔서 감사합니다. 나는 이미 이것을 시도했다. on ('child_added, ...)은 채널이 처음로드 될 때 여러 번 호출 된 다음 새 메시지가 추가 된 후에 여러 번 호출됩니다. 이것은 예상된다. 문제는 다른 채널에 메시지를 추가 한 다음 이전 채널을로드 할 때 시작됩니다. 그런 다음 새 메시지를 추가하면 ('child_added, ...) 두 번 호출됩니다. – thmr
예 .on ("child_added")이 두 번 호출 되었기 때문입니다. 새 채널에 대한 새 수신기를 추가하기 전에 .off ("child_added")를 호출해야합니다. – Anant