0

我有以下应用程序,它只是一个包含rhandsontable表格的折叠面板。

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)

它按预期工作:面板以隐藏其内容开始,如果我们单击它,面板将打开并看到表格。

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

如果我们然后关闭面板并重新打开它,就没有这种滞后,我们甚至可以随着面板重新打开逐渐看到表格。

我不知道这是一个功能还是一个错误,或者是谁的“错”是:rhandsontable因为懒惰启动?shinyBS,因为懒得启动它的内容?shiny一般来说,仅在需要时立即触发重绘?我认为它是rhandsontable,因为更基本的元素如textInput()没有这个问题,但不能确定。

那么,有没有办法在应用程序启动时强制初始化表格,而不是仅在面板展开时?

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

4

1 回答 1

1

我认为应该这样做:

server <- function(input, output, session) {
  output$table <- renderRHandsontable({
    rhandsontable(
      data.frame(
        a = 1:2,
        b = 2:3
      )
    )
  })
  outputOptions(output, "table", suspendWhenHidden = FALSE)
}
于 2020-10-02T07:02:53.157 回答