我正在开发一个使用jQuery DataTables授权主题(Smart Admin)的项目。我发现该工具是一个很好的客户端解决方案,专门用于过滤结果而无需返回服务器。
由于没有足够的空间,我们显示的表字段只是数据库中的一部分。问题是导出功能只包含这些有限的列。如果我们有一个隐藏的列也会被导出(例如:csv,xls,pdf)等,我会这样做。
我试图躲过一个场地,这对我来说没有用。如果你能指出我做错了什么,我有责任。
我引用了以下文章:Data Table Example - Hidden Columns
没有控制台错误和其他功能(过滤,导出效果很好)。
我的担忧是我们可能有一个错误,没有更新到最新版本。我想我们有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: -> }}}
提前致谢,祝你们周末愉快。
答案 0 :(得分:0)
所以你想要的是额外的列不能在UI中显示(因为房地产限制)
但是,您希望这些额外的列出现在导出的csv中。
数据表的作用是隐藏列存在于表HTML中,但标记为display:none。这是因为隐藏列的想法是它们不会显示在任何地方,但它们是可用的,以便可以搜索它。
如果你想实现这一点,你需要编写一个自定义jQuery,它将挑选出列中的所有数据,然后将其刷新到csv中。
话虽这么说,我认为如果为控制器方法创建一个新的响应类型来处理csv并从显示列中分离导出列是明智的。换句话说
respond_to |format| do
html: <something>
json: <something>
csv:@model.to_csv