2017-06-15 4 views
1

私は自分のアプリで直面している問題を再現するために、以下の最小限のコードを作成しました。私がやろうとしています何同じobserveEventをトリガーする複数の入力がmodalDialogのボタンで機能しない

observeEventためactionButtonの1しか呼ばれobserveEvent内で呼び出される関数の後に作成されますmodalDialogに存在する複数の入力に対して同じobserveEventを呼び出すです。私が直面している問題は、observeEventobserveEventという複数の入力で呼び出すために、modalDialogactionButtonを追加した後では決して呼び出されないということです。このボタンを削除すると、observeEventが呼び出されます。以下は、私のコードです:

library(shiny) 

    #Function called from shiny server 
    func <- function(input,output){ 
    if(is.null(input$txt_Modal)){ 

     output$txt <- renderText("No Text Entered Yet!") 
     showModal(modalDialog(title = "Choose Survival Time", 
          textInput(inputId = "txt_Modal", "Enter text:"), 
          easyClose = FALSE, footer = actionButton(inputId = "btn_Modal_OK","OK"))) 
    }else{ 

     output$txt <- renderText({input$txt_Modal}) 
    } 

    } 

    ##UI code 
    ui <- fluidPage(

    actionButton(inputId = "btn", label = "Enter function and Print Value"), 
    textOutput(outputId = "txt") 

) 

    ##Server code 
    server <- function(input, output, session){ 

    observeEvent({ 
     input$btn 
     input$btn_Modal_OK 
    },{ 
     func(input, output) 
    }) 


    } 
    shinyApp(ui = ui, server = server) 

ここinput$btn_Modal_OKは機能func内で作成されModalDialogに作成されるボタンです。 observeEventからinput$btn_Modal_OKを削除すると、コードは期待通りに機能します。

なぜこのようなことが起こったのかは、プログラムの開始時にinput$btn_Modal_OKNULLであるためです。このエラーを取り除くと思う方法の1つは、input$btn_Modal_OKに別のobserveEventを書き込むことです。私の実際のコードにはobserveEventの中に多くの行のコードがあり、別のobserveEventに書き換えたくないのでコードが大きくなります。

私は実際のアプリでやっていることではありません。問題を再現するためにこのコードを書いただけです。どんな助けも高く評価されます!

答えて

0

問題はinput$btnが初期化に0NULLから切り替えてモーダルを引き起こしたが、あなたはinput$btnが実際にそれが1以上の値を持つときには、押したときfuncにのみトリガーされるようにしたいということでした。これはあなたの問題を解決した理由です:

observeEvent(c(input$btn, input$btn_Modal_OK), { 
    validate(need(input$btn > 0, '')) 
    func(input, output) 
}) 

enter image description here

関連する問題