>

사용자가 입력 한 데이터를 확인하고 일부 조건을 테스트하고 modalDialog() 를 통해 경고하고 싶습니다  더 많은 사용자 입력을 얻으려면 (예 : 프롬프트 X is NA; is this correct? Y/N ).

그러나 나는 여러 번 showModal(modalDialogFunction()) 를 넣으면   observeEvent 에서 전화 , 모달이 팝업되는 등의 이유로 사용자에 대한 마지막 것만 평가됩니다. print  문은 조건이 충족되었는지 확인합니다.

이 형식 또는 유사한 형식으로 순차적 모달을 어떻게 실행할 수 있습니까?

단일 파일 앱 : numericInput() 로 놀아보세요 모달이 어떻게 실행되는지 봅니다.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      numericInput("first", label="First", value=0),
      numericInput("second", label="Second", value=0)
    ),
    mainPanel(
      actionButton("click", label="Click")
    )
  )
)
server <- function(input, output) {
  firstModal <- function(){
    modalDialog(
      p("First is greater than zero"),
      actionButton("clickHere", label="Click to continue")
    )
  }
  secondModal <- function(){
    modalDialog(
      p("Second is greater than zero"),
      actionButton("clickAgain", label="Click to continue again")
    )
  }
  observeEvent(input$click, {
    if(input$first>0){
      print("First is greater than 0")
      showModal(firstModal())
    }
    if(input$second>0){
      print("Second is greater than 0")
      showModal(secondModal())
    }
  })
}
shinyApp(ui = ui, server = server)

  • 답변 # 1

    ID가 같고 동시에 보이는 두 개의 입력 버튼을 가질 수 없다는 것을 알았습니다. 이 문제를 해결하기 위해 첫 번째 모달을 여는 버튼에는 다른 ID가 필요합니다. 모달의 모든 "다음"버튼은 동시에 표시되지 않기 때문에 하나의 ID를 공유 할 수 있습니다. 이 작동 예를 확인하십시오 :

    ui <- fluidPage(
          actionButton("openFirst", label="Click")
    )
    server <- function(input, output) {
      # function to create a modal, can be different functions as well
      makeModal <- function(text){
        modalDialog(
          footer=list(actionButton("click", label="Click to continue"), modalButton("Close")),
          numericInput("number", "Enter a number", value=0),
          p(text)
        )
      }
      # open the first modal
      observeEvent(input$openFirst, {
        showModal(makeModal("first one opened"))
      })
      # open a new modal at button click.
      observeEvent(input$click, {
        if(input$number > 15){ showModal(makeModal("input was greater than 15!"))
        }else if(input$number > 5){ showModal(makeModal("input was greater than five!"))
        }else{
          showModal(makeModal("Input was not greater than five!"))
        }
      })
    }
    shinyApp(ui = ui, server = server)
    
    

  • 이전 android - 컴파일 컴파일 버전의 오류
  • 다음 루트가 아닌 액세스 권한과 docker-compose로 공유 볼륨을 만들려면 어떻게해야합니까?