【发布时间】:2014-08-29 01:48:28
【问题描述】:
我得到了一个带有 DataTables 的 RStudio Shiny 服务器页面,并且我得到了 TableTools 和 ColReorder 在下面的示例中工作,但是 ColVis(Show/hide columns 按钮)的行为方式与 http://datatables.net/extensions/colvis/ 中的示例不同:
单击Show/hide columns 按钮时,列表与下表中的值混合在一起,我无法通过再次单击该按钮或单击页面中的任何其他位置来使列表消失(再次,数据表中的示例页面行为正确)。
另外,我对使用sDom 对表中的不同元素进行排序感到困惑。我希望Show/hide columns 按钮位于右上角而不是左上角。我也不确定如何在表格的sDom 中订购不同的元素,以便在更改列的顺序后,保存到 CSV/Excel 或隐藏某些列会给我新的表格布局而不是原来的布局.
有什么想法吗?
ui.R
shinyUI(pageWithSidebar(
h1('Diamonds DataTable with TableTools'),
tagList(
singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js',type='text/javascript'))),
singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/js/TableTools.min.js',type='text/javascript'))),
singleton(tags$head(tags$script(src='//cdn.datatables.net/colreorder/1.1.1/js/dataTables.colReorder.min.js',type='text/javascript'))),
singleton(tags$head(tags$script(src='//cdn.datatables.net/colvis/1.1.0/js/dataTables.colVis.min.js',type='text/javascript'))),
singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/js/ZeroClipboard.min.js',type='text/javascript'))),
singleton(tags$head(tags$link(href='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/css/TableTools.min.css',rel='stylesheet',type='text/css'))),
singleton(tags$script(HTML("if (window.innerHeight < 400) alert('Screen too small');")))
),
dataTableOutput("mytable")
)
)
服务器.R
shinyServer(function(input, output, session) {
output$mytable = renderDataTable({
diamonds[,1:6]
}, options = list(
"sDom" = 'RMDCT<"clear">lfrtip',
"oTableTools" = list(
"sSwfPath" = "//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/swf/copy_csv_xls.swf",
"aButtons" = list(
"copy",
"print",
list("sExtends" = "collection",
"sButtonText" = "Save",
"aButtons" = c("csv","xls")
)
)
)
)
)
})
#
此外,列排序和列重新排序存在问题: 如果一个排序然后重新排序列并再次排序,则列标题会翻转。例如,按列深度排序,然后将第一列向左移动,然后再次单击标题进行排序,现在我们得到了标题深度以及来自错误列的内容。查看快照:
【问题讨论】:
-
这个库只需要
sDom选项。那么小部件应该正确显示。但是,小部件会更改 DOM 中的对象,因此您可能需要合并对Shiny.unbindAll()和Shiny.bindAll()的调用,请参阅 groups.google.com/forum/#!msg/shiny-discuss/IE6aQfKXd1I/… -
这个
Shiny.unbindAll()和Shiny.bindAll()调用应该相对于表在哪里进行?