The best way to keep the sort order (and choice) is to use proxyDataTable and replaceData to update your data, rather than creating new tables every time the data is updated:
mydata = reactive({
df$ID <<- c(df$ID[n], df$ID[-n])
df
})
output$foo = DT::renderDataTable(isolate(mydata()))
proxy = dataTableProxy('foo')
observe({
replaceData(proxy, mydata(), resetPaging = FALSE)
})
, . , , , : https://github.com/rstudio/DT/issues/359
, rownames = false datatable, replaceData.
proxyDataTable , DT:: renderDataTable:
tags$head(tags$script(src="my.js"))
preDrawCallback = JS("initTableOrder"),
drawCallback = JS("saveTableOrder")
javascript my.js( www):
var tableSortOrderSave;
function initTableOrder(settings, json) {
if(tableSortOrderSave === undefined){
$(this.api().table().order());
}else{
$(this.api().table().order(tableSortOrderSave));
}
}
function saveTableOrder(settings, json) {
order = $(this.api().table().order());
if(order.length > 0){
tableSortOrderSave = order;
}
}