2015-05-02 13 views
6

Ich arbeite an einem Projekt, das jQuery DataTables bevollmächtigte Thema (Smart Admin) verwendet. Ich finde das Tool eine großartige clientseitige Lösung, um die Ergebnisse zu filtern, ohne zum Server zurückzukehren.jQuery DataTable - Spalte ausblenden Problem

Die Tabellenfelder, die wir zeigen, sind nur ein Teil von denen in der Datenbank vorhanden sind, da nicht genügend Platz vorhanden ist. Das Problem besteht darin, dass die Exportfunktion nur diese begrenzten Spalten enthält. Ich rot das, wenn wir eine versteckte Spalte haben, die auch exportierte werden (ex: csv, xls, pdf) etc.

Ich versuchte, ein Feld zu hien und das funktionierte nicht für mich. Ich bin verpflichtet, wenn Sie darauf hinweisen könnten, was ich falsch mache.

I verwiesen den folgenden Artikel: Data Table Example - Hidden Columns

Es gibt noch keine Konsole Fehler und der Rest der Funktionalität waren (Filterung, funktioniert gut Export).

Wie auch immer meine Sorge ist, dass wir vielleicht einen Fehler haben, nicht auf den neuesten Stand gebracht haben. Ich denke wir haben v1.10.

# @fn   setup: -> {{{ 
    # @brief  Sets up DataTable plugin with the help of the @$_tableId provided. 
    setupDataTables: -> 
    self = @ 

    @setupCheckboxes() if @$_bulkControls.length > 0 

    @$_dataTables = $(@$_tables).dataTable 
     "columnDefs": [ 
     { 
      "targets": [1, 2, 3, 4], 
      "visible": false 
     } 
     ], 
     "sDom": "<'dt-toolbar'<'col-xs-12 col-sm-6'f><'col-sm-6 col-xs-6 hidden-xs'T>r>t<'dt-toolbar-footer'<'col-sm-6 col-xs-12 hidden-xs'i><'col-sm-6 col-xs-12'p>>" 
     "oTableTools": { 
     "aButtons": [ 
      "copy", 
      { 
      "sExtends": "csv", 
      "sTitle": @generateDocumentName() 
      }, 
      { 
      "sExtends": "xls", 
      "sTitle": @generateDocumentName() 
      }, 
      { 
      "sExtends": "pdf", 
      "sTitle": @generateDocumentName(), 
      "sPdfMessage": "SmartAdmin PDF Export", 
      "sPdfSize": "letter" 
      }, 
      { 
      "sExtends": "print", 
      "sMessage": "Generated by SmartAdmin <i>(press Esc to close)</i>" 
      } 
     ], 
     "sSwfPath": "<%= asset_path('copy_csv_xls_pdf.swf') %>" 
     }, 
     "autoWidth" : true, 
     "preDrawCallback" : -> 
     # Initialize the responsive datatables helper once. 
     if !self.$_responsiveHelperDatatableTabletools 
      self.$_responsiveHelperDatatableTabletools = new ResponsiveDatatablesHelper($('#datatable_tabletools'), self.$_breakpointDefinition) 
     , 
     "rowCallback" : (nRow) -> 
     self.$_responsiveHelperDatatableTabletools.createExpandIcon(nRow) 
     , 
     "drawCallback" : (oSettings) => 
     @$_responsiveHelperDatatableTabletools.respond() 

     # Setup bulk control containers if requiredkCo 
     @setupBulkControls() if @$_bulkControls.length > 0 

    $("#datatable_tabletools thead th input[type=text]").on 'keyup change', -> 
     self.$_dataTables 
     .column($(this).parent().index()+':visible') 
     .search(this.value) 
     .draw() 


    # end of setup: -> }}} 

Vielen Dank im Voraus und wünsche euch ein wunderbares Wochenende.

+0

Können hinzufügen Sie [mColumns] (http://datatables.net/extensions/tabletools/button_options#mColumns) Parameter mit 'all' Wert für jede der Tasten (zum Beispiel' { „sExtends ":" xls "," mColumns ":" all ", ...}') und sehen, ob es einen Unterschied macht? Stellen Sie sicher, dass Sie das neueste TableTools-Plug-in verwenden. Außerdem könnte das Problem in der [datatables-responsive] (https://github.com/Comanche/datatables-responsive) Bibliothek sein, die Sie verwenden, es entfernt '' Elemente aus DOM, wenn die Bildschirmgröße reduziert wird. –

+0

Geben Sie den HTML-Code mit Java-Skript –

Antwort

0

Also, was Sie wollen, ist, dass die zusätzlichen Spalten nicht in der Benutzeroberfläche angezeigt werden können (wegen Immobilien Einschränkungen)
Sie möchten jedoch diese zusätzlichen Spalten in der exportierten CSV vorhanden sein.

Was Datat ist, ist, dass die ausgeblendeten Spalten in der Tabelle HTML vorhanden sind, aber als display: none markiert sind. Dies liegt daran, dass die Idee der versteckten Spalten darin besteht, dass sie nirgends auftauchen, aber verfügbar sind, damit sie durchsucht werden können.

Wenn Sie dies erreichen möchten, müssen Sie eine benutzerdefinierte jQuery schreiben, die alle Daten in den Spalten auswählen und dann in csv spülen.

Das gesagt, ich denke, es wäre ratsam, wenn Sie einen neuen Antworttyp für Ihre Controller-Methode erstellen, um CSV zu behandeln und die Exportspalten von den Anzeigespalten zu trennen. Mit anderen Worten

respond_to |format| do 
html: <something> 
json: <something> 
csv:@model.to_csv