繁体   English   中英

在 R Shiny DT (DataTable) 中渲染 JavaScript 会破坏页面导航和反应功能

[英]Rendering JavaScript breaks page navigation and reactive function in R Shiny DT (DataTable)

我有一个用 R Shiny 构建的数据表,并使用我的反应式函数filteredData()动态呈现数据。 我从 Azure SQL 引入的数据有几列(索引 3 和 29),其中包含大量 nvarchar 文本; 这段文字破坏了表格的视觉美感,并使查看多行变得痛苦。 我的解决方案是将这些列的单元格中的可见文本限制为 200 个字符,并将其余部分显示为悬停时的工具提示。

    output$table1 <- renderDT(
        DT::datatable(filteredData(),
                            selection = "single",
                            escape = FALSE,
                            style = "bootstrap4",
                            rownames = FALSE,
                            options = list(
                                dom = 'rtip',
                                scrollX=TRUE,
                                autoWidth = TRUE,
                                searching=FALSE,
                                ordering=TRUE,
                                bFilter = FALSE,
                                pageLength = 5,
                                columnDefs = list(list(
                                    targets = c(3, 28),
                                    width = '600px'
                                    # THIS BREAKS THE TABLE, CANNOT GO TO *NEXT* PAGE
                                    ,render = JS(
                                        "function(data, type, row, meta) {",
                                        "return type === 'display' && data.length > 200 ?",
                                        "'<span title=\"' + data + '\">' + data.substr(0, 200) + '...</span>' : data;",
                                        "}")
                                )))
        ))

这个解决方案有效(有点)。 文本按预期截断并在悬停时显示工具提示,但随后破坏了允许用户转到数据表中的下一页或上一页的内置按钮(现在我将我的数据表限制为每页 5 条记录)。 当我单击“下一步”时,屏幕中间会弹出一个半透明的小窗口并显示“正在处理”,但卡在此循环中。 它也打破了我对数据的反应性过滤。 注释掉有问题的 Javascript

                                    #,render = JS(
                                    #    "function(data, type, row, meta) {",
                                    #    "return type === 'display' && data.length > 200 ?",
                                    #    "'<span title=\"' + data + '\">' + data.substr(0, 200) + '...</span>' : data;",
                                    #    "}")

修复了页面导航,但我没有工具提示或文本截断。 我已经检查了 DT 网站上的文档,除了我的反应式 SQL 派生数据之外,我不明白我在做什么。

编辑:我正在使用这些软件包,因为它的价值是: shinymanagertidyverseDTbs4Dash 我还在我的dashboardBody()调用了shinyjs::useShinyjs() dashboardBody()

我不知道发生了什么,但你可以试试省略号插件:

library(DT) 

dat <- data.frame(
  A = c("fnufnufroufrcnoonfrncacfnouafc", "fanunfrpn frnpncfrurnucfrnupfenc"),
  B = c("DZDOPCDNAL DKODKPODPOKKPODZKPO", "AZERTYUIOPQSDFGHJKLMWXCVBN")
)

datatable(
  dat, 
  plugins = "ellipsis",
  options = list(
    columnDefs = list(list(
      targets = c(1, 2),
      render = JS("$.fn.dataTable.render.ellipsis( 200, false )")
    ))
  )
)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM