Shiny downloadHandler ждет, пока данные будут готовы - PullRequest
0 голосов
/ 25 мая 2020

Обработка данных в моем блестящем приложении занимает несколько секунд. У меня есть кнопка загрузки, и я бы хотел, чтобы на нее нельзя было нажимать, пока данные не будут подготовлены, или чтобы обработчик загрузки дождался подготовки. На данный момент нажатие кнопки загрузки до 5 секунд возвращает файл по умолчанию html, а затем через 5 секунд он ведет себя так, как ожидалось.

Мое текущее решение - использовать `shiny js :: hide / show. Я показал это ниже.

Это лучшая практика? Кроме того, почему shinyjs::useShiny() в начале? Это кажется уникальным для этого пакета.

ui <- fluidPage(
shinyjs::useShiny(),
  shinyjs::hidden(downloadButton("downloadData", "Download"))
)

server <- function(input, output) {
   # Our dataset
  data <- mtcars

if(is.null(mtcars)){shinyjs::hide(“downloadData”)}
else{shinyjs::show(“downloadData”)}

   output$downloadData <- downloadHandler(
     filename = function() {
      paste("data-", Sys.Date(), ".csv", sep="")
     },
     content = function(file) {
      write.csv(data, file)}
  )
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 26 мая 2020

То, что вы описываете, совершенно разумно и ранее предлагалось для stackoverflow. Вы также можете использовать disable / enable вместо hide / show, что, по вашему мнению, удобнее для пользователей.

useShiny js () требуется для настройки всех R <--> JavaScript общение, которое происходит. Без него, когда вы попытаетесь вызвать блестящую функцию js с сервера, ничего не произойдет, потому что пользовательский интерфейс не был инициализирован с помощью javascript. Некоторые другие пакеты также приняли этот шаблон, так как я сделал блестящий js, особенно пакеты, которые также работают с javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...