2016-11-15 22 views
0

私はいくつかのShinyコードを書いています。ここで、ユーザーはアプリにいくつかの入力を入力して、アクションボタンをクリックします。アクションボタンは長い時間かかるシミュレーションを実行させるので、アクションボタンをクリックして無効にすると、シミュレーションが実行されるまでユーザーがクリックし続けることはできません。私はshinyjs::enableshinyjs::disableの機能に遭遇しましたが、それらを利用するのは苦労していました。ここに私のサーバーのコードは次のとおりです。ただしShinyのボタンを無効にする

output$button1= renderUI({ 
     if(input$Button1 > 0) { 
      shinyjs::disable("Button1") 
       tableOutput("table") 
      shinyjs::enable("Button1")} 
    }) 

、私はこのコードを使用すると、何も起こりませんアクションボタンをクリックしたとき。つまり、アクションボタンがグレーアウトしたり、テーブルが生成されたりしません。私はつまり、

output$button1= renderUI({ 
      if(input$Button1 > 0) { 
       shinyjs::disable("Button1") 
        tableOutput("table") 
} 
     }) 

shinyjs::enable()コマンドを奪うときただし、表にはまず生成されますし、ボタンがグレーになり、しかし、私はボタンがグレーに行くと期待しているだろうし、その後、テーブル自体を生成します。

私はここで間違っていますか?ここで


Geovanyの提案に基づいて、私の更新されたコードは、まだそれはまだ私の明確化のために、私も持っている

Button1Ready <- reactiveValues(ok = FALSE) 

     observeEvent(input$Button1, { 
      shinyjs::disable("Button1") 
      RunButton1Ready$ok <- FALSE 
      RunButton1Ready$ok <- TRUE 
    }) 

output$SumUI1= renderUI({ 
     if(Button1Ready$ok){ 
      tableOutput("table") 
      shinyjs::enable("Button1") 
     } 
}) 

のために動作しませんです。私が思う

output$table <- renderTable({ 

#My code.... 

)} 

答えて

4

を同じ反応関数でshinyjs::disableshinyjs::enableを使用していることを確認してください。最後の効果だけが表示されます。さまざまなリアクティブ関数(disable/enable)に分割して、ボタンの再アクティブ化を制御するための反応変数を追加することをお勧めします。

コードの正確さはわかりませんが、下のコードではそのアイデアを示しています。

library(shiny) 
library(shinyjs) 


ui <- fluidPage(
    shinyjs::useShinyjs(), 
    sidebarLayout(
    sidebarPanel(
     actionButton("Button1", "Run"), 
     shinyjs::hidden(p(id = "text1", "Processing...")) 
    ), 
    mainPanel(
     plotOutput("plot") 
    ) 
) 
) 

server <- function(input, output) { 

    plotReady <- reactiveValues(ok = FALSE) 

    observeEvent(input$Button1, { 
    shinyjs::disable("Button1") 
    shinyjs::show("text1") 
    plotReady$ok <- FALSE 
    # do some cool and complex stuff 
    Sys.sleep(2) 
    plotReady$ok <- TRUE 
    }) 

    output$plot <-renderPlot({ 
    if (plotReady$ok) { 
     shinyjs::enable("Button1") 
     shinyjs::hide("text1") 
     hist(rnorm(100, 4, 1),breaks = 50) 
    } 
    }) 
} 

shinyApp(ui, server) 
+0

私はあなたの提案に基づいて質問を更新しました。まだ私のために働いていない。一見単純な間違いがあるかどうかを見て、見ていますか? – RustyStatistician

+0

あなたの問題の最小の実例なしでは、問題は何かを知ることは難しいです。誰でも実行できる作業コードを提供してください。 – Geovany

関連する問題