2016-01-15 10 views
9

Sto utilizzando Meteor Tabular package che implementa DataTables. Sto cercando di creare un tavolo da una collezione Mongo. La collezione è un documento di moduloDisegna ogni elemento della matrice nella nuova riga con DataTables (Meteor Tabular)

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

definisco tabella Meteor con il seguente codice

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 
}); 

Il problema è che quando questa viene estratta, tutti 365 elementi di ciascuna estremità variabile in una singola cella, quindi ho una fila enorme. Voglio ogni elemento da creare in una riga separata, vale a dire

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

considerando che è attualmente

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

Trasformare i dati in un elenco di {input: ..., output: ..., date: ...} è conveniente? Se questo è possibile (e va bene) è facile per dataTable elaborarlo –

risposta

3

Sarà necessario trasformare i vostri dati e poi metterlo in una raccolta locale, dal momento che il pacchetto non accetta matrici (contrariamente a quanto pensavo prima).

Questo sembra funzionare:

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 
}); 

Si noti che questo potrebbe non essere più reattivi. Ma suppongo che i tuoi dati in quei grandi array non cambieranno nessuno dei due, altrimenti probabilmente cambierai lo schema per renderlo più compatibile con la meteora. Quindi speriamo che non sia un problema.

+0

Seguendo il tuo suggerimento si ottiene l'errore 'Errore: Le opzioni Tabular.Table devono specificare collection' –

+0

oh sì, hai ragione. Quel pacchetto in realtà non accetta array (stavo pensando a uno diverso). Ho aggiornato la mia risposta di conseguenza. –

+0

Alla fine ho appena scritto uno script per creare una nuova raccolta direttamente in Mongo, l'overhead di archiviazione non è un problema, quindi era la via più facile. –

1

Poiché TabularTables non consente gli array, è possibile provare a utilizzare il pacchetto Meteor di aslagle: table reattivo. L'esempio sul pacchetto git page mostra come utilizzare la sintassi di mongo sull'array.

Problemi correlati