隐藏时如何让DT :: datatable更新

时间:2016-07-21 21:14:53

标签: r datatable shiny

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);
  })

1 个答案:

答案 0 :(得分:1)

事实证明,如果您已经在使用Javascript,则只需调用表上的draw函数即可。以下Javascript代码应该可以工作:

$(document).ready(function() {
  $('#hide').click(function() {
    $('#df').hide();
  });
  $('#show').click(function() {
    $('#df').show();
    $("#df table").DataTable().draw();
  });
});