在 R ShinyProxy 中,如何在用户使用 extensions = 'ColReorder' 重新排序后从 DT::datatable 获取列的顺序?

In R ShinyProxy, how do I get the order of columns from a DT::datatable after a user has re-ordered them using extensions = 'ColReorder'?

我在 ShinyProxy 中有一个 Shiny 应用程序,需要用户登录才能访问。我在应用程序中有一个 DT::datatable 允许用户重新排序列(大约有 20-30 列数据,所以重新排序它们很痛苦)。如果他们首先对列重新排序,然后使用任何 filters/slicers,则列将重新排序回默认值;如果他们离开应用程序并重新打开它,列将恢复为默认顺序。

我想给用户一个 "save column order" ActionButton,然后将每个用户的这些设置存储在 Redis 中,这样当他们使用过滤器 and/or 离开并重新进入应用程序时,他们有他们喜欢的列顺序而不是我设置的默认顺序 - 想让他们更容易!!

我发现这个网站 (https://rstudio.github.io/DT/shiny.html) 让我很接近,但没有雪茄。我在想它可能类似于 input$tableId_columns_allinput$tableId_columns - 然而,那些没有 work/returned NA.

我已经尝试了大量的谷歌搜索,我发现大多数看起来他们能给我答案的东西都是 Python 或 jQuery,我认为这不会解决我的问题.

我愿意接受遵循我想到的 ActionButton + redis 方法或完全不同的想法的建议!我真的只是想在 ShinyProxy 中保存用户设置。

谢谢!!

我不知道你如何save/restore下订单,但你可以通过以下方式获得订单:

library(shiny)
library(DT)

js <- c(
  "table.on('column-reorder', function(e, settings, details){",
  "  Shiny.setInputValue('colOrder', details.mapping);",
  "});"
)

ui <- fluidPage(
  br(),
  DTOutput("tbl"),
  br(),
  verbatimTextOutput("columnsOrder")
)

server <- function(input, output, session){

  output[["tbl"]] <- renderDT({
    datatable(iris[1:5,], extensions = "ColReorder", 
              callback = JS(js), 
              options = list(
                colReorder = TRUE
              )
    )
  })

  output[["columnsOrder"]] <- renderPrint({
    input[["colOrder"]]
  })

}

shinyApp(ui, server)