使用this answer,我在Shiny中创建了一个DT::datatable,其中包含一列复选框,但我遇到了一个问题,如果我选中一些复选框,转到表上的另一个页面,然后返回到原始页面,则这些复选框现在未选中。如何在切换页面时使复选框检查持久化?下面是一个简单的例子:
library(shiny)
library(DT)
runApp(
list(ui = fluidPage(
dataTableOutput("dtout")),
server = function(input, output, session) {
shinyInput <- function(FUN, id, num, ...) {
inputs <- character(num)
for (i in seq_len(num)) {
inputs[i] <- as.character(FUN(paste0(id, i), label = NULL, ...))
}
inputs
}
output$dtout <- renderDataTable({
datatable(
cbind(Pick = shinyInput(checkboxInput, "srows_", nrow(mtcars), value = NULL, width = 1), mtcars),
options = list(drawCallback= JS('function(settings) {Shiny.bindAll(this.api().table().node());}')),
selection = 'none', escape = F)
})
})
)
字符串
2条答案
按热度按时间0lvr5msh1#
为了在页面之间移动时保持复选框状态,必须禁用服务器端处理。您可以通过使用
server = FALSE
调用DT::renderDataTable
来设置此设置。的数据
完整的最小示例:
字符串
ctehm74n2#
为了在RShinyDataTable中切换页面时使复选框状态持久化,可以使用服务器端处理,并将复选框输入与DataTable本身分开处理。下面是代码的更新版本,演示了这一点:
字符串
在此修改后的代码中:
1.我们将复选框的值存储在一个名为
checkboxValues
的reactiveValues
对象中。这允许我们跟踪每个复选框的状态。1.当任何复选框被更改时,我们使用观察器更新
checkboxValues
。这可确保值始终是最新的。1.在
renderDataTable
函数中,我们使用shinyInput
函数动态生成复选框。我们传入values
参数,用checkboxValues
中的存储值初始化复选框。1.我们通过在
datatable
选项中设置serverSide = TRUE
来启用服务器端处理。这允许DataTable高效地处理分页和其他操作。1.我们使用一个观察器来更新
checkboxValues
,每当表被重新呈现时。这确保了复选框值即使在切换页面时也保持不变。通过这些修改,在DataTable中切换页面时,复选框状态现在应该保持不变。
如果你有任何进一步的问题,请告诉我!