【发布时间】:2019-06-30 14:05:47
【问题描述】:
我希望在根据条件单击按钮时阻止 dropdownbutton (shinywidgets) 打开。这是为了避免renderUI 在dropdownButton 模态面板上的内容丢失input 时出错。
当用户点击dropdownButton 时,通常会打开一个面板。在我的例子中,这个面板包含依赖于各种变量的renderUIelements。
如果这些变量还不存在,renderUIs将导致错误吐出。
我想知道的是有没有办法查看点击
observeEvent(input$MydropdownButton, { ....})
然后在不满足条件时完全阻止它打开面板,而不是将其切换为立即关闭(非工作版本)
我打算做的是给用户一个sweetalert,而不是通知用户他必须创建或加载所需数据的选项。而且我知道如何传达信息,纯粹是想以“if else”的方式停止开头部分
- 我知道我可以在带有
ifstatement 的观察者内使用shinyjs::disable('MydropdownButton')来阻止按钮的使用,但这将不允许我在单击时触发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面板已经被触发打开时关闭它,因此闪亮尝试renderui元素,导致错误,而不是阻止它打开。
这里有一个完整的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"))
)
```
【问题讨论】:
标签: r shiny shinyjs dropdownbutton