2016-01-15 6 views
9

Ich verwende die Meteor Tabular package, die DataTables implementiert. Ich versuche, eine Tabelle aus einer Mongo-Sammlung zu erstellen. Die Sammlung ist ein Dokument des FormularsZeichnen Sie jedes Element des Arrays in einer neuen Zeile mit DataTables (Meteor Tabular)

{ 
    input: Array[365], 
    output: Array[365], 
    date: Array[365] 
} 

I der Tabelle in Meteor mit dem folgenden Code definieren

TabularTables.MyTable = new Tabular.Table({ 
    name: "MyTable", 
    collection: MyTable, 
    columns: [ 
     {data: "input", title: "Input", searchable: false}, 
     {data: "output", title: "Output", searchable: false}, 
     {data: "date", title: "Date", searchable: false} 
    ], 
    order: [[1, "desc"]], 
    pageLength: 10 
}); 

Das Problem ist, dass, wenn diese gezogen wird, werden alle 365 Elemente jeder Variablen am Ende in eine einzelne Zelle, also habe ich eine massive Reihe. Ich möchte jedes Element in einer separaten Zeile erstellt werden, dh

Input  Output  Date 
input[0] output[0] date[0] 
input[1] output[1] date[1] 

während es derzeit ist

Input   Output   Date 
input[0...364] output[0...364] date[0...364] 
+0

Die Umwandlung Ihrer Daten in eine Liste von {input: ..., output: ..., date: ...} ist erschwinglich? Wenn dies möglich ist (und in Ordnung zu tun), ist es einfach für DataTable, es zu verarbeiten –

Antwort

3

Sie benötigen, um Ihre Daten zu transformieren und sie dann in eine lokale Sammlung setzen, da das Paket akzeptiert keine Arrays (im Gegensatz zu dem, was ich früher dachte).

Dies scheint zu funktionieren:

TabularTables = {}; 
local = new Meteor.Collection(); 

var data = MyTable.findOne(); 
if (data) { 
    local.find().forEach(function(x) { local.remove(x._id) }); 
    for (var i in data.input) { 
     local.insert({ 
      input: data.input[i], 
      output: data.output[i], 
      date: data.date[i] 
     }); 
    } 
} 

TabularTables.MyTable = new Tabular.Table({ 
    name: "MyTable", 
    collection: local, 
    columns: [ 
     {data: "input", title: "Input", searchable: false}, 
     {data: "output", title: "Output", searchable: false}, 
     {data: "date", title: "Date", searchable: false} 
    ], 
    order: [[1, "desc"]], 
    pageLength: 10 
}); 

Beachten Sie, dass dies nicht mehr reaktiv sein können. Aber ich gehe davon aus, dass sich Ihre Daten in diesen großen Arrays auch nicht ändern werden, oder Sie würden wahrscheinlich Ihr Schema ändern, um mit dem Meteor zu beginnen. Hoffentlich ist das kein Problem.

+0

Folgen Sie Ihrem Vorschlag Ergebnisse in der Fehler 'Fehler: Tabular.Table Optionen müssen angeben, Sammlung' –

+0

oh ja, Sie haben Recht. Dieses Paket akzeptiert Array nicht wirklich (ich dachte an ein anderes). Ich habe meine Antwort entsprechend aktualisiert. –

+0

Ich habe am Ende nur ein Skript geschrieben, um eine neue Sammlung direkt in Mongo zu erstellen, der Speicheraufwand ist kein Problem, also war es der einfachste Weg. –

1

Da TabularTables keine Arrays zulässt, könnten Sie stattdessen das Meagle-Paket aslagle: reactive-table verwenden. Das Beispiel für das Paket git page zeigt, wie Sie die Mongo-Syntax in Ihrem Array verwenden können.

Verwandte Themen