r-将DT表重置为原始排序顺序



我有一个闪亮的应用程序,它有一个允许列排序的DT表。当数据被替换时,我还想删除用户可能单击的任何列排序。但是,当数据被替换时,它会根据表中指定的排序自动进行排序。我看不到任何选项可以将排序重置为replaceData函数的一部分或独立的代理函数。是否可以在不重新渲染表的情况下执行此操作?

library(DT)
library(shiny)
ui <- fluidPage(
DTOutput(outputId = "table"),
actionButton(inputId = "replace", label = "Replace Data")
)
server <- function(input, output) {

output$table <- renderDT({
datatable(data = data.frame(COL_1 = c(1, 3, 2)), rownames = FALSE)
})

observeEvent(input$replace, {

data <- data.frame(COL_1 = c(4, 6, 5))

replaceData(proxy = dataTableProxy(outputId = "table"),
data = data,
rownames = FALSE)

})

}
shinyApp(ui = ui, server = server)

我找到了一个javascript解决方案。

library(DT)
library(shiny)
library(shinyjs)
clearSorting <- function(proxy) {
runjs(paste0("$('#' + document.getElementById('", proxy$id,"').getElementsByTagName('table')[0].id).dataTable().fnSort([]);"))
}
ui <- fluidPage(
DTOutput(outputId = "table"),
actionButton(inputId = "replace", label = "Replace Data"),
useShinyjs()
)
server <- function(input, output) {

output$table <- renderDT({
datatable(data = data.frame(COL_1 = c(1, 3, 2)), rownames = FALSE)
})

observeEvent(input$replace, {

data <- data.frame(COL_1 = c(4, 6, 5))

clearSorting(proxy = dataTableProxy(outputId = "table"))

replaceData(proxy = dataTableProxy(outputId = "table"),
data = data,
rownames = FALSE)

})

}
shinyApp(ui = ui, server = server)

最新更新