我希望在根据条件单击按钮时阻止dropdownbutton
( ) 打开。shinywidgets
这是为了避免模式面板上的内容renderUI
丢失错误。input
dropdownButton
当用户点击 adropdownButton
时,它通常会打开一个面板。在我的例子中,这个面板包含renderUI
依赖于各种变量的元素。如果这些变量还不存在,renderUIs
则会导致错误吐出。
我想知道的是是否有办法查看点击
observeEvent(input$MydropdownButton, { ....})
,然后在不满足条件时完全阻止它打开面板,而不是将其切换为立即关闭(非工作版本)
我打算做的是给用户一个sweetalert
通知用户他必须创建或加载所需数据的选项。而且我知道如何传达信息,纯粹是想以“if else”的方式停止开头部分
- 我知道我可以
shinyjs::disable('MydropdownButton')
在观察者内部使用 withif
语句来阻止按钮的使用,但这将不再允许我触发sweetalert
点击 - 我也知道如果缺少所需的输入,我可以调整我的所有渲染 UI 以不渲染,但现在
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
文件来演示它调用不存在的数字。
服务器文件
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"))
)
```