2016-05-24 6 views
0

Hintergrund:
Ich bin beschäftigt, eine Anwendung zu erstellen, die (unter anderem) in der Lage sein muss, einen Bericht anzuzeigen. Ich wähle DataTables, weil es super funktioniert und einfach zu implementieren ist. Ich habe eine Anwendung erstellt, die auf einem (statischen) Datensatz basiert. Ich habe jedoch die Anforderung erhalten, die Anwendung zu ändern, um mit mehreren Datensätzen arbeiten zu können.Make DataTables Spaltenvariable basierend auf einem Array

Frage:
amonst andere Dinge, ich mag die statisch definierten Spalten ersetzen (Code-Schnipsel sehen), mit einer Variablen. In diesem Fall ein Array mit id, keten, name, x, y, das an anderer Stelle dynamisch deklariert wird.

Wie ändere ich meine Funktion, um ein variables Array zu integrieren, statt die Spalten hart zu codieren?

sollte das Ergebnis Ende von

ändern
"columns": [ 
    {"data": "id"}, 
    {"data": "keten"}, 
....... 

um so etwas wie

"columns": [ 
    {"data": *variableReportData*} 

Code:

function rapport_vullen(){ 
    $("#rapport").dataTable({ 
     destroy: true, 
     "aaData": geojson.features.map(function(row) { return row.properties; }), 
     "columns": [ 
      {"data": "id"}, 
      {"data": "keten"}, 
      {"data": "name"}, 
      {"data": "x"}, 
      {"data": "y"} 
     ] 
    }); 
    download_rapport() 
}; 

Antwort

1

Sie das Array von Spaltennamen in ein Array umwandeln kann von Objekten mit .map() wie so:

var inputArray = ["a","b","c"]; // for example 
inputArray.map(function(d) { return {data:d}; }); 

So ist das I/O wäre:

["a","b","c"] --> [{data:"a"},{data:"b"},{data:"c"}] 

Und dann die Datentabelle erstellen die Ausgabe mit.

function rapport_vullen(inputArray){ 
    $("#rapport").dataTable({ 
     destroy: true, 
     aaData: geojson.features.map(function(row) { return row.properties; }), 
     columns: inputArray.map(function(d) { return {data:d}; }) 
    }); 
    download_rapport() 
} 
+0

Ich habe mit dem Code ein wenig gebastelt, aber die Ergebnisse sind nicht 100% korrekt. Obwohl es die korrekte Anzahl von Datensätzen für meinen Bericht zurückgibt, sind alle Datensätze [Objekt Objekt] –

+0

10 @JordiZ Wird an der Konsole ausgegeben? Verwenden Sie 'JSON.stringify (obj)', wenn Sie ausgeben. – 4castle

+0

Wenn ich console.log (inputArray), zeigt die Konsole ein Objekt. Wenn ich console.log (JSON.stringify (inputArray) verwende, sind die Ergebnisse: '[{" data ":" id "}, {" data ":" x "}, {" data ":" y "}, { "data": "keten"}, {"data": "name"}] ', das ist gut, dachte ich. Wenn ich jedoch versuche, es in meine DataTables zu integrieren, gibt es einen leeren Bericht. Fehlermeldung:" TypeError : ungültig 'in' Operand e " –

1

können Sie verwenden Javascript .map() Funktion:

es wird die Array-Elemente in die Objekte umwandeln, wie man wollte.

var arr = [id, keten, name, x, y]; 

var objArr = arr.map(function(item) { return {data:item} }); 

console.log (objArr);

[{"data": "id"}, 
    {"data": "keten"}, 
    {"data": "name"}, 
    {"data": "x"}, 
    {"data": "y"}] 

Dann können Sie dies direkt in Ihrer Datentabelle Funktion verwenden. Danke

Verwandte Themen