#r #shiny
#r #блестящий
Вопрос:
У меня есть проект, который включает в себя несколько actionButtons. Иногда они обычно отображаются на экране, но не работают.
Когда я использую инструменты разработчика Chrome, чтобы проверить, что происходит, класс для кнопок, которые работают, включает «shiny-bound-input», в то время как кнопки, которые не работают, не включают это как часть своего класса.
Этот класс не является частью кода actionButton:
actionButton(inputId="A", label="OK")
# <button id="A" type="button" class="btn btn-default action-button">OK</button>
Итак, Shiny добавляет его в какой-то момент. Чтобы помочь в отладке этого, было бы полезно знать, почему кнопка обычно появляется на экране, но в ее класс не добавлен «shiny-bound-input». Я подозреваю, что одной из причин является дублирование входных данных, но сегодня это не моя ошибка.
—-Редактировать—-
Трудно воспроизвести пример, когда это раздел кода в проекте с несколькими страницами кода. Но я нашел свою ошибку, и в конце концов это были повторяющиеся идентификаторы, но дубликатами в этом случае были два выходных идентификатора, которые не имели ничего общего с нерабочими кнопками. Они были намного позже в том же фрагменте кода, который визуализируется.
Итак, по крайней мере, одно решение этой проблемы: если ваши кнопки не работают, у вас могут быть дублирующиеся идентификаторы ввода или вывода где-то в отображаемом фрагменте кода.
—-Редактировать 2—-
И теперь, когда я знаю, в чем ошибка, я могу привести пример. Обратите внимание, что два вывода TextOut в приведенном здесь коде имеют одинаковый идентификатор. Это происходит, когда вы копируете / вставляете и забываете обновить идентификатор. Как есть, кнопка в этом коде не работает. Но исправьте идентификатор в этом втором выводе текста, и все в порядке. Также обратите внимание на отсутствие какого-либо сообщения об ошибке.
ui <- uiOutput("test_page")
server <-function(input, output, session) {
output$test_page <- renderUI(tagList(
actionButton("button", "OK"),
textOutput("test_output1"),
textOutput("test_output1")
))
observeEvent(input$button, {
print("button pressed")
output$test_output1 = renderText("button pressed")
output$test_output2 = renderText(input$button)
})
}
shinyApp(ui = ui, server = server)
Комментарии:
1. shiny.rstudio.com/gallery/actionbutton-demo.html , надеюсь, это может помочь
2. Я не уверен, когда у кнопки не было бы этого класса. Может быть, предоставьте нам минимальный воспроизводимый пример, чтобы мы могли увидеть, когда это произойдет?
3. Я добавил запрошенный минимальный воспроизводимый пример. Имейте в виду, что этот пример взят из гораздо более крупного проекта, и именно поэтому он использует трюк с размещением пользовательского интерфейса внутри сервера.