2016-09-23 8 views
3

Ich habe eine Echtzeit-Datenbank mit Firebase und ich verwende den folgenden Code, um eine Verbindung zur Datenbank herzustellen und einige Daten daraus zu erhalten.Abrufen von Daten in Firebase genau einmal

window.onload = function(){ 
var databaseWebsites = firebase.database().ref('/websites').orderByChild('votes'); 
console.log(databaseWebsites); 
databaseWebsites.on('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 

     var webTemp = document.getElementById(childSnapshot.val().id); 
     webTemp.style.order = order; 
     var webText = webTemp.getElementsByClassName('likeText'); 
     webText[0].innerHTML = childSnapshot.val().votes; 
     order--; 
    }); 

    order = 0; 
}); 

Es erhält alle Daten in der Reihenfolge und verwendet es richtig.

Das Problem ist, ich möchte die Daten auf dem Frontend nicht aktualisieren, bis der Benutzer die Seite aktualisiert. Das System ist ein Abstimmungssystem, das nach Abstimmungswerten geordnet ist. Wenn es ständig aktualisiert würde, wäre dies eine schlechte Benutzererfahrung.

Jede Hilfe wird geschätzt.

Dank

Antwort

6

Ändern Sie den on zu once, Firebase on für Änderungen in der Datenbank Knoten zuhört und sendet eine Antwort.

databaseWebsites.on('value', function(snapshot) { 

zu

databaseWebsites.once('value', function(snapshot) { 

Ein Auszug aus Firebase doc ist

Der Wert Ereignis jedes Mal, wenn Daten geändert an der angegebenen Datenbankreferenz, einschließlich Änderungen an Kindern genannt. Um die Größe Ihrer Snapshots zu begrenzen, hängen Sie nur auf der niedrigsten Ebene an, die für das Ansehen von Änderungen benötigt wird.

Visit this url to read more