gpt4 book ai didi

jquery - R Shiny 的 DataTables ColVis 行为

转载 作者:行者123 更新时间:2023-12-03 22:33:01 29 4
gpt4 key购买 nike

我得到了一个带有 DataTables 的 RStudio Shiny 服务器页面,并且在下面的示例中得到了 TableTools 和 ColReorder 的工作,但是 ColVis(显示/隐藏列 按钮)的行为方式与http://datatables.net/extensions/colvis/ 中的示例:

单击显示/隐藏列按钮时,列表与下面表格中的值混合在一起,并且我无法通过再次单击该按钮或单击页面中的其他任何位置来使列表消失(同样,数据表页面中的示例行为正确)。

enter image description here

此外,我对使用 sDom 来对表中的不同元素进行排序感到困惑。我希望显示/隐藏列按钮位于右上角而不是左上角。我也不确定如何对表的 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")
)
)
)
)
)
})
#

此外,列排序和列重新排序也存在问题:如果先排序,然后重新排序列并再次排序,则列标题会翻转。例如,按列深度排序,然后将第一列向左移动,然后再次单击标题进行排序,现在我们得到了标题深度,其中内容来自错误的列。查看快照:

enter image description here

最佳答案

一些注意事项:

当前的data.table版本与shiny atm不兼容。我们需要1.9.4版本。然后我们还需要 pre 1.1.0 colvis 的版本。不幸的是,这引用了旧版本的 jQuery,它发出了对 jQuery.browser 的调用。 。所以引用这个jQuery.browser需要删除它出现在第 856 到 859 行。 sDom 属性也有点棘手,它没有出现在被 dom 替换的新 data.table 中。 。文档位于http://legacy.datatables.net/usage/options#sDom 。我们将 colVis 内容添加到 class="cvclear"使用此片段<"cvclear"C> 。通过将其放在 sDom 的开头来将其放置在顶部。陈述。这是可行的,但是我们需要将其右对齐。通常,这可以通过添加 align = "right" 来完成。到类(class),但因为类(class)是通过 sDom 启动的我们必须使用 HTML5 css text-align:right 。我们使用tags$style添加它。

所以上面应该允许我们使用 colVis与目前的 Shiny 。当 Shiny 升级到 data.table 1.10.0那么我们应该能够使用当前的colVis插件文件和修复希望是不必要的。

以下内容对我有用:

ui.R

# get the colVis js file and delete lines 
library(RCurl)
write(getURL("https://raw.githubusercontent.com/openMF/mifosx-community-apps/master/IndividualLendingGeneralJavaScript/resources/libs/DataTables-1.9.4/extras/ColVis/media/js/ColVis.js")
, file = 'www/colvis.js')
tf <- readLines("www/colvis.js")[-c(856:859)]
write(tf, file = "www/colvis.js")
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='colvis.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$head(tags$link(href='https://raw.githubusercontent.com/openMF/mifosx-community-apps/master/IndividualLendingGeneralJavaScript/resources/libs/DataTables-1.9.4/extras/ColVis/media/css/ColVis.css',rel='stylesheet',type='text/css'))),
singleton(tags$script(HTML("if (window.innerHeight < 400) alert('Screen too small');"))),
singleton(tags$head(tags$link(href='https://raw.githubusercontent.com/DataTables/ColVis/18b52dfdd7255ffe96a92aadc16cadd70e3e174a/media/css/ColVis.css',rel='stylesheet',type='text/css')))
, tags$head(
tags$style(HTML("
.cvclear{
text-align:right}")
)
)
),
dataTableOutput("mytable")
)
})

服务器.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output, session) {
output$mytable = renderDataTable({
diamonds[,1:6]
}, options = list(
"sDom" = 'RMD<"cvclear"C><"clear"T>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")
)
)
)
)
)
}
)

您可以在以下位置查看该应用程序:

http://128.199.255.233:3838/userApps/john/cvtestapp/

enter image description here

关于jquery - R Shiny 的 DataTables ColVis 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24629902/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com