Как использовать единственный actionButton для генерации tableOutput и переключения его без перезагрузки каждый раз? - PullRequest
1 голос
/ 18 июня 2019

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

Мне нужна одна кнопка, которая делает это:

  • , есливходное значение равно нулю, ничего

  • если входное значение не равно нулю, сгенерируйте таблицу и отобразите ее

  • , если таблица уже отображается, скрытьэто.

Я попытался поставить вывод таблицы как hidden и переключать его при нажатии кнопки.Это работает, но когда я снова нажимаю кнопку, чтобы скрыть таблицу, таблица перезагружается.

У меня есть это в моем пользовательском интерфейсе:

actionButton(inputId = "viewFile", label = "View file"),
hidden(tableOutput("fileTable"))

И вот что я попробовална моем сервере:

  observeEvent(input$viewFile,{
      output$fileTable <- renderTable({...)}) #generating the table
      toggle("fileTable")
  })

Как вы можете понять, когда нажимается кнопка viewFile, вывод fileTable отображается, а затем переключается (это не скрыто больше так показывается).Для генерации результата в первый раз, это идеально.

Однако, если я снова нажму на кнопку, чтобы скрыть таблицу, renderTable вычисляется снова.Это бесполезная операция (вы не хотите генерировать вывод таблицы только для того, чтобы скрыть ее).

Есть ли способ сохранить работу переключателя, но предотвратить регенерацию tableOutput?Я думал об использовании if на выходе, но вы не можете оценить выходные элементы с сервера.

(Warning: Error in $.shinyoutput: Reading objects from shinyoutput object not allowed.)


Еще одна деталь: позже я попытаюсь улучшить свое приложение, заново сгенерировав вывод таблицы, если файл изменился, есть ли способсделать это тоже?

Спасибо и извините за вопрос новичка.Я немного потерян.Если у вас есть какие-либо вопросы относительно моего кода, пожалуйста, не стесняйтесь.

1 Ответ

1 голос
/ 18 июня 2019

Я нашел простой способ сделать именно то, что я хочу.

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

UI:

file <- fileInput(inputId = "file", label="myfile")
hidden(actionButton(inputId = "viewFile", label = "View file"))
hidden(tableOutput("fileTable"))

Сервер:

observeEvent(input$file, {
    #The output is generated but not displayed
    output$fileTable<- renderTable({read.csv(file[4][[1]])})
    #We display the button
    toggle("viewFile")
})


observeEvent(input$viewFile,{
    toggle("fileTable")
})

Вот что происходит:

  • Пользователь загружает файл

  • Таблица генерируется из файла, но не отображается

  • Появляется кнопка «Просмотр файла»

  • Пользователь нажимает кнопку

  • Отображается таблица

  • Пользователь снова нажимает на кнопку

  • Таблица скрыта

Повторять до бесконечности.Хорошего дня

...