在刷新主面板屏幕时出现Checkboxinput问题

时间:2017-04-21 14:11:51

标签: r checkbox shiny

我有一个闪亮的应用程序,如果用户想要显示数据,用户可以选中一个框,如果是这样,他可以选择要在主面板中显示的数据表的数量。有2个操作按钮,一个用于提交和刷新。如果用户在selectinput中选择1或2或3并点击提交。它将在主面板中显示3个数据表。一旦他点击刷新或取消选中该复选框,它就会清除主面板屏幕,但如果他决定再次选中该复选框,则最后显示的表格将显示在主面板上。这也应该清除屏幕。如果他再次勾选该框,我该如何清除屏幕。这是我的代码。感谢您关注此事我是R和Shiny的新手

    library(shiny)
    library(DT)
    ui <- fluidPage(
      sidebarLayout(
        sidebarPanel(
        checkboxInput("addData", "Add Data"),
        conditionalPanel(condition="input.addData === true",
          selectInput("amountTable", "Amount Tables", 1:10),
          actionButton("submit1" ,"Submit", icon("refresh"),
                       class = "btn btn-primary"),

          actionButton("refresh1" ,"Refresh", icon("refresh"),
                       class = "btn btn-primary")
         )

        ),
      mainPanel(
       # UI output
       uiOutput("dt")
       )
      ) 
     )

   server <-  function(input, output, session) {

    global <- reactiveValues(refresh = FALSE)

    observe({
      if(input$refresh1) isolate(global$refresh <- TRUE)
    })

    observe({
      if(input$submit1) isolate(global$refresh <- FALSE)
    })

    observeEvent(input$submit1, {
       lapply(1:input$amountTable, function(amtTable) {
         output[[paste0('T', amtTable)]] <- DT::renderDataTable({
         iris[1:amtTable, ]
            })
     })
   })

   observeEvent(input$submit1, {

     lapply(1:input$amountTable, function(j) {
        output[[paste0('Text', j)]] <- renderText({
       paste0("This is AmountTable", j)
        # br()  ## add space in between the text and table
       })
    })
 })

 output$dt <- renderUI({  
   if(global$refresh) return()
     tagList(lapply(1:input$amountTable, function(i) {
       list(textOutput(paste0('Text', i)),br(),
           dataTableOutput(paste0('T', i)))
     }))
 })


}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:2)

您可以将此代码添加到server功能。

observe({
    if(input$addData == FALSE) isolate(global$refresh <- TRUE)
  })

取消选中checkbox

时,这将删除表格

答案 1 :(得分:2)

你应该使用 if(input$refresh1 | !input$addData) isolate(global$refresh <- TRUE)代替此行if(input$refresh1) isolate(global$refresh <- TRUE)

编辑:krish更快。但是,我留下答案就像缩短代码一样。