Блестящий модальный диалог в ответ на несколько кнопок - PullRequest
0 голосов
/ 10 декабря 2018

Рассмотрим следующее приложение:

ui <- basicPage(
  actionButton('button1', 'click one'),
  actionButton('button2', 'click two')
)
server <- function(input, output){
  popup <- function(){
    modalDialog(easyClose = T,
                'popup window triggered')
  }
}
shinyApp(ui=ui, server=server)

Моя цель заключается в том, чтобы модальное окно запускалось при нажатии любой из кнопок.Я понимаю, что могу создать observeEvent для каждой кнопки, но в полном приложении будет много кнопок на разных страницах navbar.Поэтому, чтобы избежать дублирования кода, я бы хотел собрать их в один observeEvent.Я попробовал некоторые из предложений здесь .

Добавление

 observeEvent({
    input$button1
    input$button2
    }, {
    showModal(popup())
  })

к server() на самом деле не работает, потому что по какой-то странной причине button2 необходимощелкнуть до того, как button1 откликнется.

Вместо этого добавление

  observeEvent(c(input$button1, input$button2), {
    showModal(popup())
  })

приведет к тому, что модальное окно уже появляется при запуске, что не должно происходить.

ИтакЕсть ли способ объединить несколько кнопок действий в одно событие наблюдения без этих нежелательных действий?

1 Ответ

0 голосов
/ 10 декабря 2018

Вам нужно установить ignoreInit = TRUE для observeEvent:

ui <- basicPage(
  actionButton('button1', 'click one'),
  actionButton('button2', 'click two')
)
server <- function(input, output){
  popup <- function(){
    modalDialog(easyClose = T,
                'popup window triggered')
  }

  observeEvent(c(input$button1, input$button2), {
    showModal(popup())
  }, ignoreInit = TRUE)

}
shinyApp(ui=ui, server=server)
...