У меня есть R Shiny, где server.R
выводит большое количество динамически генерируемых объектов пользовательского интерфейса.
Вместо обработки сотен объектов в input
для обработки, я подумал, что мог бы использовать bs_accordion()
из пакета bsplus .
Я ожидал, что bs_accordion()
сообщит о состоянии элементов, которыми он управляет, обратно server.R
через объект input
.
Мой план состоял в том, чтобы динамически генерировать элементы пользовательского интерфейса только для выбранного в данный момент элемента, используя renderUI()
.
К сожалению, насколько я могу судить, ничего в пакете bsplus
ничего не помещаетв input
.
Следующее работает в консоли браузера (предположим, что элемент accordion равен MYACCORDION
) ...
MYACCORDION.onclick=function(){
Shiny.onInputChange('SELECTED_DIV',document.getElementsByClassName('in')[0].getElementsByClassName('shiny-input-container')[0].id
}
... in
, очевидно, класс bs дает элементна данный момент выбрана в гармошке и всегда есть только одна.Поэтому после этого input$SELECTED_DIV
обновляется всякий раз, когда выбирается что-то новое.
Но я не могу сделать это программно.Я попытался поместить его в tags$script(...)
в конце fluidPage()
, и он не привязывается к div.Я также попытался вставить его через div(...,onclick=FOO)
, но значение onclick
экранируется и выводится и не интерпретируется как текст.
- Где находится правильное место для вставки
onclick
функций вui.R
? - В качестве альтернативы, как заставить значение атрибута
onclick
обрабатываться как есть без экранирования символов? - Или уже есть пакет для Shiny для присоединенияJavascript функционирует для
onclick
событий?
Спасибо.