Я хочу остановить открытие dropdownbutton
(shinywidgets
) при нажатии кнопки в зависимости от условия.Это позволяет избежать ошибок renderUI
при отсутствии input
содержимого на модальной панели dropdownButton
.
Когда пользователь нажимает на dropdownButton
, он обычно открывает панель.В моем случае эта панель содержит renderUI
элементов, которые зависят от различных переменных.Если эти переменные еще не существуют, renderUIs
приведет к выпадению ошибок.
Я хотел бы знать, есть ли способ посмотреть на нажатие observeEvent(input$MydropdownButton, { ....})
и затем полностью остановить егоот открытия панели, если условие не выполнено, вместо того, чтобы переключить ее на немедленное закрытие (не рабочая версия)
Что я планирую сделать, это дать пользователю sweetalert
вместо этого, который информирует пользователя окакие параметры он должен создать или загрузить необходимые данные.И я знаю, как сделать сообщение, просто пытаюсь остановить открывающуюся часть 'если еще' способом
- Я знаю, что могу использовать
shinyjs::disable('MydropdownButton')
внутри наблюдателя сif
заявление, чтобы заблокировать использование кнопки, но это не позволило бы мне больше вызывать sweetalert
на клике - Я также знаю, что могу настроить все мои renderUI, чтобы они не отображались, если необходим вводотсутствует, но к настоящему моменту задействовано много
renderUIs
, и я: - A: боюсь испортить код, а
- B: стремится найтиесли есть способ вообще остановить открытие
dropdownButtons
Я пробовал что-то вроде этого:
observeEvent(input$MydropdownButton, {
if(!is.null(values$neededData)) { 'just open the dropdownbutton' }
else { toggleDropdownButton('TestDrop')
'run sweetalert code'}
})
НоtoggleDropdownButton
закроет панель dropdownButton
только после того, как она уже сработала, чтобы открыть, и, таким образом, блестящая попытка render
элемента ui
с возникшей ошибкой, вместо того, чтобы заблокировать ее открытие.
Вот полные файлы кодов server
и ui
, чтобы продемонстрировать, что они обращаются к несуществующим номерам.
Файл SERVER
shinyServer = function(input, output, session) {
values <- reactiveValues()
output$Reset_Threshold <- renderUI({
if(values$randomNr == 2) { actionButton(inputId = "Reset_Threshold", label = icon("undo")) }
else if(values$randomNr == 1) { actionButton(inputId = "Reset_Threshold", label = icon("table")) }
})
observeEvent(input$TestDrop, {
if(!is.null(values$randomNr )) { print('no problems')}
else { toggleDropdownButton('TestDrop')
# Run other code here to alert user.
}
})
}
Файл пользовательского интерфейса
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
dropdownButton(inputId= "TestDrop",
uiOutput('Reset_Threshold'),
icon = icon("table"), tooltip = tooltipOptions(title = "Click"))
)
```