在单个ObserveEvent中移除并插入UI元素

在单个ObserveEvent中移除并插入UI元素,r,shiny,selectize.js,R,Shiny,Selectize.js,我正在构建一个带有3个selectizeinput框的仪表板。当用户在单个selectizinput框中选择一个选项时,其余未选择过滤器中的选项将得到更新。更新可能需要几秒钟的时间。对于给定的selectizeinput框,最多可以选择3个选项。选项的选择在observeEvent中处理。在real app中,有多个observeEvents来处理多个selectizeinput框中的选项选择 我希望只有在更新发生后,才会在selectizeinput框下方显示一个小操作按钮,上面写着“完成”。

我正在构建一个带有3个selectizeinput框的仪表板。当用户在单个selectizinput框中选择一个选项时,其余未选择过滤器中的选项将得到更新。更新可能需要几秒钟的时间。对于给定的selectizeinput框,最多可以选择3个选项。选项的选择在observeEvent中处理。在real app中,有多个observeEvents来处理多个selectizeinput框中的选项选择

我希望只有在更新发生后,才会在selectizeinput框下方显示一个小操作按钮,上面写着“完成”。这适用于选定的第一个选项。当用户从同一个selectizeinput框中选择第二个选项时,我希望“完成”按钮消失,并仅在其他selectizeinput框更新时重新出现。为此,我尝试过使用removeUI和insertUI,但不起作用

我已经尝试过shinyjs库的hide()、show()和toggle()在更新过程中隐藏“Done”操作按钮,并且只在更新完成后才显示它。但它不起作用

用户界面


侧栏您的代码不可复制。请提供
srcC
destT
等。您的代码不可复制。请提供
srcC
dest
等。
sidebar <- shinydashboard::dashboardSidebar(

  sidebarMenu(
              id = "sidebarmenu",
              menuItem(h4("Sample"), tabName = "map"),
              conditionalPanel("input.sidebarmenu === 'map'",
                               selectizeInput(
                                 "srcLoc", label="Filter 1", choices=srcC, selected=NULL, multiple=TRUE, options=list(maxItems=nSrc, placeholder="")
                               )
                               ,
                               selectizeInput(
                                 "srcCity", label="Filter 2", choices=NULL, selected=NULL, multiple=TRUE, options=list(maxItems=nCity, placeholder="")
                               ),
                               selectizeInput(
                                 "destLoc", label="Filter 3", choices=destT, selected=NULL, multiple=TRUE, options=list(maxItems=nDest, placeholder="")
                               ),
                               tags$div(id="placeholder")

              )
  )
  )

body <- shinydashboard::dashboardBody(
  tabItems(
    tabItem(tabName="map"
    )
  )
)

dashboardPage(
  dashboardHeader(title = "Trial"),
  sidebar,
  body
)
shinyServer<- function(input,output,session) {

  observeEvent(input$srcLoc, {
    removeUI("#done")
    if (!is.null(input$srcLoc) & is.null(input$srcCity) & is.null(input$destLoc)) {
      df <- getDf(locsAgg, srcc, destt, srcregg, destregg, regionCountryCity, input$srcLoc, input$srcCity, input$destLoc)

      if (length(input$srcLoc)>1) {
        locc <- paste(input$srcLoc, collapse=" -> ")
      } else {
        locc <- input$srcLoc
      }

      cities <- getCity4(df, locc, srcregg, srcc, regionCountryCity)
      sc <- sort(cities[!cities %in% c(NA,"NA")])
      if (length(sc) > 1) {
        sc <- as.data.table(sort(cities[!cities %in% c(NA,"NA")]))
      } 

      destChoice <- unique(getLocs2(df,"S"))
      destChoice <- destChoice[!destChoice %in% c(NA,"NA")]
      if (length(destChoice)>1) {
        destChoice <- as.data.table(destChoice)
      }

      updateSelectizeInput(session, "destLoc", 
                           choices=destChoice,
                           selected=input$destLoc,
                           options=list(placeholder="Select a Country",maxItems=nDest))
      updateSelectizeInput(session, "srcCity",
                           choices=sc,
                           selected=input$srcCity,
                           options=list(placeholder="Select a City",maxItems=nCity))
      insertUI("#placeholder",where="afterEnd",ui = 
    }
  })

}