r语言 - 如何将数据透视表动态插入闪亮的 UI



我需要在我的闪亮应用程序中生成动态用户界面。这涉及在某些情况下使用 insertUI 将数据透视表插入 UI 页面。我发现我只能成功地做到这一点。删除元素并再次插入后,它不会出现。问题仅与 rpivotTable 有关。所有其他界面元素,如数据表,动作按钮等,都可以很好地工作。下面是重现该问题的示例代码:

library(shiny)
library(rpivotTable)
ui<- fluidPage(title="test page",
  actionButton("A","insert pivot"),
  actionButton("B","remove pivot")
)
server<- function (input, output, session)
{
  ds<-data.frame(a="1",b="2")
  observeEvent(input$A,{
    cat("insertn")
    insertUI(selector="#B",
             where="afterEnd",
             ui=rpivotTableOutput("C"),
             immediate = T)
    output$C <- renderRpivotTable({ rpivotTable(data = ds) })
  })
  observeEvent(input$B,{
    cat("removen")
    removeUI(selector="div#C",immediate = T)
  })
}
shinyApp(ui,server)

有什么建议如何解决这个问题吗?

这个问题也作为问题发布在 rpivotTable GitHub 中,并在那里用下面的解决方案代码回答:

library(shiny)
library(rpivotTable)
ui<- fluidPage(title="test page",
               actionButton("A","insert pivot"),
               actionButton("B","remove pivot"),
               div(id = 'placeholder') 
)
server<- function (input, output, session)
{
  ds<-data.frame(a="1",b="2")
  inserted <- c()
  observeEvent(input$A, {
    btn <- input$A
    id <- paste0('txt', btn)
    insertUI(
      selector = '#placeholder',
      ## wrap element in a div with id for ease of removal
      ui = div(
        rpivotTable(ds), 
        id = id
      ))
    inserted <<- c(id, inserted)
  })
  observeEvent(input$B, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted[length(inserted)])
    )
    inserted <<- inserted[-length(inserted)]
  })
}
shinyApp(ui,server)

我假设解决方案基本上是为每个新的插入UI使用新的唯一Id。

相关内容

  • 没有找到相关文章

最新更新