当datatable
隐藏在Shiny中时,即使使用outputOptions(output, 'tableID', suspendWhenHidden=FALSE)
,它们似乎也不会更新。以下是MRE。如果您隐藏datatable
,然后添加或删除行,然后显示datatable
,您就会看到它未更新。但是,只要您在datatable
可见时修改datatable
,所有过去的所有更改都会赶上"用它。我们怎样才能强制#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();
});
});
在重新隐藏时重绘自己?
$http.get('http://xxx.xxx.xxx.xxx/?id='+id)
.then(function(rest) {
alert(id);
})
答案 0 :(得分:1)
事实证明,如果您已经在使用Javascript,则只需调用表上的draw
函数即可。以下Javascript代码应该可以工作:
$(document).ready(function() {
$('#hide').click(function() {
$('#df').hide();
});
$('#show').click(function() {
$('#df').show();
$("#df table").DataTable().draw();
});
});