我正在尝试在闪亮的应用程序环境中使用按图点击事件。在正式演示之后,我将使用以下代码来更新日期选择器,并在单击时跳转到我的应用程序中的另一个选项卡:
observe({
d <- event_data("plotly_click", source = 'plot')
if(!is.null(d) & (input$navPanel == 'overview')) {
d %>% filter(curveNumber == 0) %>% select(x) -> selected_date
updateDateInput(session, "date", value = lubridate::ymd(selected_date$x))
updateTabsetPanel(session, "navPanel", selected = "details")
}
Run Code Online (Sandbox Code Playgroud)
然而,当我再尝试从切换details到overview标签,我立即得到后仰的details标签。我猜想,这是因为该事件不会被清零,即d是不是null当标签被改变,因此在条件if-clause评估为TRUE。
因此,如何以编程方式清除click事件?添加d <- NULL到条件的末尾似乎没有做到这一点。
我有同样的问题,我发现的解决方法是将旧状态存储在全局变量中,并且仅当该变量发生变化时才进行更新,而不是在!is.null()
selected_date <- 0 # declare outside the server function
server <- function(input, output, session) {
observe({
d <- event_data("plotly_click")
new_value <- ifelse(is.null(d),"0",d$x) # 0 if no selection
if(selected_date!=new_value) {
selected_date <<- new_value
if(selected_date !=0 && input$navPanel == 'overview')
updateDateInput(session, "date", value = lubridate::ymd(selected_date))
}
})
...
}
Run Code Online (Sandbox Code Playgroud)
这还允许您在取消选择元素时添加行为