2017-04-20 81 views
0

我正在构建一个闪亮的应用程序,我想刷新主面板屏幕。这是一个示例代码。我有一个提交按钮来显示数据,我有一个重新按钮来清除屏幕。我不太确定如何在R中编写重新生成的按钮,因为我是新手。感谢您寻找到使用动作按钮刷新闪亮的主面板屏幕

library(DT) 
ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
     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) { 
    observeEvent(input$submit1, { 
    lapply(1:input$amountTable, function(amtTable) { 
     output[[paste0('T', amtTable)]] <- DT::renderDataTable({ 
     iris[1:amtTable, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    tagList(lapply(1:10, function(i) { 
    dataTableOutput(paste0('T', i)) 
    })) 
}) 

} 

shinyApp(ui, server) 

回答

2

如果使用刷新按钮,您可以添加从renderUI()任何回报的可能性。 因为重置一个动作按钮并不是那么直截了当,你必须使用一个变通变量的解决方法。

if(global$refresh) return()

这种反应变量,您可以用刷新控制和提交按钮 例如if(input$refresh1) isolate(global$refresh <- TRUE) 你包裹在独立的观察功能。 Full code see below:

library(DT) 
ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     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, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    if(global$refresh) return() 
    tagList(lapply(1:10, function(i) { 
     dataTableOutput(paste0('T', i)) 
    })) 
    }) 

} 

shinyApp(ui, server) 
+0

这正是我所期待的。谢谢你是一个拯救生命的人。还有一点,有一种方法可以在我点击刷新按钮后将选择输入刷新回1。现在它刷新主面板,但selectinput不会初始化为1.请欣赏它! – aotearoa

+0

'if(input $ refresh1)isolate(global $ refresh < - TRUE)'''后面加'updateSelectInput(session,“amountTable”,“Amount Tables”,1:10,1)'' – BigDataScientist

+0

对不起,我在主面板上显示一个文本,例如每个表的Amount.Table1,Amount.Table2等。看来paste0不起作用。欣赏它! – aotearoa