2017-12-27 7 views
0

Ich habe die folgende Firebase-Abfrage, die alle Systeme in meiner Datenbank (Datenbank namens Fehler) findet und in einer Tabelle ablegt. Das Problem ist, dass die Tabelle in der Reihenfolge erstellt wird, in der ich die Elemente zur Datenbank hinzugefügt habe, und nicht in alphabetischer Reihenfolge, wie ich es möchte. Irgendeine Idee was ich vermisst habe (durcheinander!)?Firebase-Datenbankausgabe alphabetische Sortierung Problem

var theroot = firebase.database().ref("Faults/"); 
    theroot.orderByChild("system").on("value", Show_system_table, errData); 

    function Show_system_table(data) { 

     var raw_data = data.val(); 
     var results_array = Object.values(raw_data); 

     for (i = 0; i < results_array.length; i++) { 

      var single_item = results_array[i]; 
      var result_name = single_item.system; 
      var markup = "<tr> <td>" + result_name + "</td> </tr>"; 
      $("#system_tbl").append(markup); 
     } 
    } 

    function errData() { 
     console.log("Error issues"); 
    } 

Vielen Dank im Voraus

Peter

PS - Ich weiß, dass ich die var die außerhalb der Schleife setzen sollte (werde ich später, versprochen!)

+0

'orderByValue' statt' orderByChild' nicht hilft? Von - https://firebase.google.com/docs/database/web/lists-of-data#sort_data – xadhix

+0

Hallo - Es mag mich sein, aber das führte zu dieser Fehlermeldung. Uncaught Error: Query.orderByValue ist fehlgeschlagen: Wurde mit 1 Argument aufgerufen. Erwartet keine. – PeterW

+0

@PeterW fügen Sie nichts innerhalb '' orderByValue() '.. akzeptiert keine Argumente .. –

Antwort

1

Wenn Sie eine Abfrage auf die execute Firebase-Datenbank gibt es drei Informationen für jedes Kind zurück:

  1. Sein Wert.
  2. Sein Schlüssel.
  3. Ihre relative Reihenfolge gegenüber anderen untergeordneten Knoten.

Wenn Sie anrufen data.val() Sie das Ergebnis zu einem regulären JSON-Objekt konvertieren, die nur leider zum ersten zwei von ihnen haben. So ist die Reihenfolge der Gegenstände zu diesem Zeitpunkt verloren.

den Auftrag zu erhalten, verwenden Sie den integrierten in Snapshot.forEach Methode:

function Show_system_table(data) { 
    data.forEach(function(snapshot) { 
     var single_item = snapshot.val(); 
     var result_name = single_item.system; 
     var markup = "<tr> <td>" + result_name + "</td> </tr>"; 
     $("#system_tbl").append(markup); 
    }); 
} 
+0

Frank - Massiver Dank für deine schnelle und hervorragende Hilfe, es hat perfekt funktioniert. Es gibt drei kleine Probleme, die jeder, der diesen Code oben verwendet, beachten sollte. 1/in Zeile drei ein Tippfehler, sein Schnappschuss, nicht Schnappschuss. 2/Das .val braucht() hinzufügen. und schließlich 3/Die vorletzte Zeile benötigt); Am Ende um die Funktion zu schließen. Kleine Dinge, leicht zu beheben und sollten nicht von Ihrer Antwort ablenken. Nochmals vielen Dank, ich schätze es sehr. Peter – PeterW

+0

Autsch ... das sind viele Tippfehler in so einem kleinen Fragment. Danke, dass du sie aufgefangen hast und trotzdem verstanden hast, was ich meinte, Peter! Ich habe das Snippet repariert. –