2016-10-10 4 views
1

그래서 Firebase 데이터베이스에서 ref라는 하위 노드를 제거하는 데 약간의 어려움이 있습니다. javascript를 사용하고 있으며 내가 처음으로 사용하는 FriendlyChat 소스에 더 추가하려고합니다.Firebase 데이터베이스에서 하위 참조를 제거하고 있습니다.

여기 내 삭제 기능에 대한 내용이 있지만 삭제되지 않는 이유가 있습니다.

FriendlyChat.prototype.loadMessages = function() { 
    // Reference to the /messages/ database path. 
    this.messagesRef = this.database.ref('notifications'); 
    // Make sure we remove all previous listeners. 
    this.messagesRef.off(); 

    // Loads the last 12 messages and listen for new ones. 
    var setMessage = function(data) { 
    var val = data.val(); 
    this.displayMessage(data.key, val.description, val.title, val.photoUrl, val.imageUrl); 
    this.deleteMessage(data.key); 
    }.bind(this); 
    this.messagesRef.limitToLast(12).on('child_added', setMessage); 
    this.messagesRef.limitToLast(12).on('child_changed', setMessage); 
    this.messagesRef.limitToLast(12).on('child_removed', setMessage); 
}; 

지금 잠시 동안 갇혀되었습니다

FriendlyChat.MESSAGE_TEMPLATE = 
    '<div class="message-container" style="padding-bottom: 30px;padding-top:30px">' + 
     '<center><div class="spacing"><div class="pic"></div> </div>' + 
     '<div style="font-size:24px" class="message"></div><br>' + 
     '<div style="font-size:20px;padding-left:0px" class="name"></div></center>' + 
     '<div onClick="deleteMessage(this.id)" class="delete">Delete</a>' + 
    '</div>'; 

// A loading image URL. 
FriendlyChat.LOADING_IMAGE_URL = 'https://www.google.com/images/spin-32.gif'; 

// Displays a Message in the UI. 
FriendlyChat.prototype.displayMessage = function(key, name, text, picUrl, imageUri) { 
    var div = document.getElementById(key); 
    // If an element for that message does not exists yet we create it. 
    if (!div) { 
    var container = document.createElement('div'); 
    container.innerHTML = FriendlyChat.MESSAGE_TEMPLATE; 
    div = container.firstChild; 
    div.setAttribute('id', key); 
    this.messageList.appendChild(div); 
    } 
    if (picUrl) { 
    div.querySelector('.pic').style.backgroundImage = 'url(' + picUrl + ')'; 
    } 
    div.querySelector('.delete').setAttribute('id', key); 
    div.querySelector('.name').textContent = name; 
    var messageElement = div.querySelector('.message'); 
    if (text) { // If the message is text. 
    messageElement.textContent = text; 
    // Replace all line breaks by <br>. 
    messageElement.innerHTML = messageElement.innerHTML.replace(/\n/g, '<br>'); 
    } else if (imageUri) { // If the message is an image. 
    var image = document.createElement('img'); 
    image.addEventListener('load', function() { 
     this.messageList.scrollTop = this.messageList.scrollHeight; 
    }.bind(this)); 
    this.setImageUrl(imageUri, image); 
    messageElement.innerHTML = ''; 
    messageElement.appendChild(image); 
    } 
    // Show the card fading-in. 
    setTimeout(function() {div.classList.add('visible')}, 1); 
    this.messageList.scrollTop = this.messageList.scrollHeight; 
    this.messageInput.focus(); 
}; 

FriendlyChat.prototype.deleteMessage = function(key) { 
    this.deleteRef = this.database.ref('notifications'); 
document.getElementById(key).onclick = function() { 
     if (confirm("Are you sure you want to delete this notification?") == true) { 
     alert("Removed: " + key); 
     this.deleteRef.child(key).remove(); 
     } else { 
     alert("Canceled"); 
     } 
} 
}; 

여기 내 loadMessages입니다. 누군가가 설명하거나 도울 수 있기를 바랍니다!

감사합니다.

답변

0

그래서 알아 냈습니다! 내 firebase 참조가 제대로 작동하지 않는다는 것을 알았습니다. 다음은 업데이트 된 코드입니다.

FriendlyChat.prototype.deleteMessage = function(key) { 
    //this.deleteRef = this.database.ref('notifications'); 
document.getElementById(key).onclick = function() { 
     if (confirm("Are you sure you want to delete this notification?") == true) { 
     alert("Removed: " + key); 
     firebase.database().ref('notifications').child(key).remove(); 
     } else { 
     alert("Canceled"); 
     } 
} 
}; 
관련 문제