【发布时间】:2016-11-25 15:36:55
【问题描述】:
当datatables 隐藏在 Shiny 中时,它们似乎不会更新,即使使用了 outputOptions(output, 'tableID', suspendWhenHidden=FALSE)。下面是一个 MRE。如果隐藏datatable,然后添加或删除行,然后显示datatable,您会看到它没有更新。但是,一旦您修改了可见的datatable,所有过去的更改都会“赶上”它。我们如何强制datatables 在隐藏时重新绘制自己?
#ui
shinyUI(
#tags$head(tags$script(src="main.js")),
fluidPage(
titlePanel("Modifying Hidden Datatable"),
sidebarLayout(
sidebarPanel(
actionButton("decrease", "Decrease Row Number"),
actionButton("increase", "Increase Row Number"),
actionButton("hide", "Hide Data Table"),
actionButton("show", "Show Data Table")
),
mainPanel(
tags$head(tags$script(src="main.js")),
DT::dataTableOutput("df")
)
)
)
)
#server
library(shiny)
library(DT)
shinyServer(function(input, output, session) {
values = reactiveValues(n = 1)
observeEvent(input$decrease, {
values$n = values$n - 1
if (values$n == 0) values$n = 1
})
observeEvent(input$increase, {
values$n = values$n + 1
if (values$n > nrow(mtcars)) values$n = nrow(mtcars)
})
output$df = renderDataTable({
df = mtcars[1:values$n, ]
DT::datatable(df)
})
outputOptions(output, "df", suspendWhenHidden=FALSE)
})
#javascript
$(document).ready(function() {
$('#hide').click(function() {
$('#df').hide();
});
$('#show').click(function() {
$('#df').show();
});
});
【问题讨论】: