0
在下面的小例子,注意,雖然file.choose()
行註釋掉,代碼按預期工作:點擊輸入選項卡切換的確定按鈕將結果標籤。updateTabsetPanel現在,沒有延遲
然而,取消對file.choose()
線和updateTabsetPanel()
功能不再起作用。在file.choose()
開始前有什麼方法讓屏幕更改屏幕?
ui <- fluidPage(fluidRow(
tabsetPanel(id="main",
tabPanel("Input", actionButton("okButton", "OK")),
tabPanel("Results", h3(textOutput("results")))
)))
server <-function(input, output, session) {
output$results = renderText("Results Tab")
observeEvent(input$okButton, {
updateTabsetPanel(session, "main", "Results")
# file.choose()
})
}
shinyApp(ui = ui, server = server)
對於這個最簡單的例子來說,它確實很好用,但是在較大的項目中,我已經觀察了標籤菜單事件並將它們用於別的東西。我想我可以在這個事件中設置一個標誌,但是我真的希望在updateTabsetPanel()和file.choose()之間插入一些命令,告訴Shiny I'在這裏等待它清除其未完成的任務。 (在真實的應用程序中,file.choose()之後有幾個進度條的任務很長) – 3D0G
這似乎不可能。當您將多個命令放入反應式命令中時,結果總是返回同一時間,不同之處在於您使用Javascript或在中間調用另一個R進程。 –
進一步思考,你的解決方案是唯一的可能性。否則,updateTabsetPanel()將啓動一個不同的observeEvent()(對於該選項卡),而我仍然處於這個中間位置。感謝您幫助我思考。我想我只是將所需的所有數據保存在第一個observeEvent()中,並且有一個不同的observeEvent()按鈕,用於根據保存的數據啓動所有處理。 – 3D0G