2016-11-18 35 views
0

我有一個閃亮的應用程序,在服務器上執行相對較長的分析。我希望有幾個選項卡允許用戶查看和下載分析輸出。這些標籤只有在分析完成後才能看到。分析完成後,製作選項卡可以看到閃亮

有一個隱藏標籤的example here直到一個事件(在這種情況下點擊按鈕),但我一直無法弄清楚事件是否完成了分析。

在下面的小例子,我已經適應的例子 - 該選項卡下單擊按鈕仍然可見。

如何讓這個TAB2" 一旦循環完成才成爲可見?

library(shiny) 
library(shinyjs) 

ui <- tagList(
    useShinyjs(), 
    navbarPage(
    "move/view tabs after analysis", 
    id = "navbar", 
    tabPanel(
     title = "Start", 
     actionButton("button", "Run Analysis") 
    ), 
    tabPanel(
     title = "Analysis output", 
     value = "tab2", 
     tableOutput("tableOutput") 
    ) 
) 
) 

server <- function(input, output, session) { 
    observe({ 
    hide(selector = "#navbar li a[data-value=tab2]") 
    }) 
    observeEvent(input$button, { 
    output$tableOutput <- renderTable({ 

     withProgress(message = 'Working', { 
     for(i in 1:5) { 
      incProgress(1/5) 
      Sys.sleep(2) 
     } 
     }) 
    }) 
    }) 
    observeEvent(input$button, { 
    toggle(selector = "#navbar li a[data-value=tab2]") 
    }) 
} 
shinyApp(ui = ui, server = server) 

回答

1

以下的伎倆,這是通過首先正確definiing表輸出在外面,而不是內部的觀察語句,但有它返回NULL,直到按鈕被點擊。如果點擊該按鈕,它的長期運行的計算和事後才它取消隱藏的標籤。

library(shiny) 
library(shinyjs) 

ui <- tagList(
    useShinyjs(), 
    navbarPage(
    "move/view tabs after analysis", 
    id = "navbar", 
    tabPanel(
     title = "Start", 
     actionButton("button", "Run Analysis") 
    ), 
    tabPanel(
     title = "Analysis output", 
     value = "tab2", 
     tableOutput("tableOutput") 
    ) 
) 
) 

server <- function(input, output, session) { 
    observe({ 
    hide(selector = "#navbar li a[data-value=tab2]") 
    }) 

    output$tableOutput <- renderTable({ 
    if(input$button > 0){ 
     withProgress(message = 'Working', { 
     for(i in 1:5) { 
      incProgress(1/5) 
      Sys.sleep(2) 
     } 
     }) 
     toggle(selector = "#navbar li a[data-value=tab2]") 
    }else{ 
     NULL 
    } 
    }) 
    outputOptions(output,"tableOutput", suspendWhenHidden=F) 
} 
shinyApp(ui = ui, server = server) 
+0

大,但這在工作 – alexwhan