强制绘制隐藏 table

Force draw of hidden table

我有以下应用程序,它只是一个包含 rhandsontable table.

的折叠面板
library(shiny)
library(shinyBS)
library(rhandsontable)

ui <- function() {
  fluidPage(
    bsCollapsePanel(
      "Test",
      rHandsontableOutput("table")
    )
  )
}

server <- function(input, output, session) {
  output$table <- renderRHandsontable({
    rhandsontable(
      data.frame(
        a = 1:2,
        b = 2:3
      )
    )
  })
}

shinyApp(ui, server)

它按预期工作:面板开始时隐藏其内容,如果我们单击它,面板会打开,我们会看到 table。

但是,在面板打开和 table 出现之间存在明显的“滞后”。我认为这是因为 table 直到那时才被初始化,所以所有实际创建 table 的工作只发生在那个时刻。

如果我们然后关闭面板并重新打开它,就没有这种延迟,我们甚至可以在面板重新打开时逐渐看到 table。

不知道是特性还是bug,又是谁的“错”:rhandsontable,懒得开机? shinyBS,懒得启动它的内容? shiny 一般情况下,仅在需要时立即触发重绘?我假设它是 rhandsontable,因为像 textInput() 这样的更基本的元素没有这个问题,但不能确定。

那么,有没有办法在应用启动时强制 table 初始化,而不是仅在面板展开时才进行初始化?

我想过将面板设置为打开,然后破解服务器以在启动时关闭面板,但我不完全确定它是如何工作的......或者它是否可以工作(如果它在第一次重绘之前关闭,会有什么不同?如果它在第一次重绘之后关闭,这意味着启动时会出现闪烁,对吧?)。

我认为应该这样做:

server <- function(input, output, session) {
  output$table <- renderRHandsontable({
    rhandsontable(
      data.frame(
        a = 1:2,
        b = 2:3
      )
    )
  })
  outputOptions(output, "table", suspendWhenHidden = FALSE)
}