Сброс ввода для бриллианта в R блестящий - PullRequest
1 голос
/ 15 февраля 2020

Он будет добавляться только при первом нажатии, потому что input$shinyalert - это TRUE после того, как я нажму "ОК". Есть ли способ сбросить вход для shinyalert, чтобы он снова вызвал мои наблюдения, когда я нажимаю кнопку действия второй / третий .. раз в сеансе.

Я пытался назначить NULL / FALSE / 0 до input$shinyalert (input$shinyalert <- NULL), но это дало мне эту ошибку.

Warning: 
Error in $<-.reactivevalues: 
Attempted to assign value to a read-only reactivevalues object

Вот мой код

# observe event for my action button
observeEvent(input$action, {
      shinyalert("","Are you sure?", type="warning", showCancelButton = TRUE)
      })

observe({
      req(input$shinyalert)
      isolate({
        newrow <- data.frame(a = "fisrt",
                             b = "second",
                             c = "third")

      # appending to mytable in SQL server
      dbWriteTable(conn, "mytable", newrow, append = TRUE)
      })
    })

1 Ответ

0 голосов
/ 15 февраля 2020

Не можете ли вы использовать функцию обратного вызова R, например:

library(shiny)
library(shinyalert)

ui <- fluidPage(
  useShinyalert(),
  actionButton("btn", "Append row")
)

server <- function(input, output, session){

  appendTable <- function(){
    newrow <- data.frame(a = "fisrt",
                         b = "second",
                         c = "third")
    dbWriteTable(conn, "mytable", newrow, append = TRUE)
  }

  observeEvent(input[["btn"]], {
    shinyalert("", "Are you sure?", type = "warning", showCancelButton = TRUE, 
               callbackR = function(x){
                 if(x) appendTable()
               })
  })

}

shinyApp(ui, server)

В противном случае для сброса можно использовать JS обратный вызов:

  observeEvent(input[["btn"]], {
    shinyalert("", "Are you sure?", type = "warning", showCancelButton = TRUE, 
               callbackJS = "function(x){
                 setTimeout(function(){Shiny.setInputValue('shinyalert', false);}, 0);
               }")
  })
...