Динамически скрывать модуль из пакета в приложении Shiny

Я пытаюсь создать приложение, которое динамически отображает и скрывает модули. Следуя этому руководству и этому коду , я могу показывать и удалять модули, созданные самостоятельно. Однако при вызове модуля из внешнего пакета (например, из Mapedit модуля editModu ) этот пользовательский интерфейс невозможно удалить с помощью предоставленного рабочего процесса. Как правильно удалить пользовательский интерфейс из модулей, загруженных вместе с пакетом?

До сих пор я использовал следующий код

      library(shiny)
library(ggplot2)
library(mapedit)
library(leaflet)

ui <- fluidPage(
  actionButton(
    inputId = "add_module",
    label = "Add a module"
  ),
  actionButton(
    inputId = "remove_module",
    label = "Remove a module"
  ),
  div(
    id = "add_here"
  )
)

server <- function(input, output, session) {
  active_modules <- reactiveVal(value = NULL)
  
  # leaflet blank map for module
    map<-leaflet()%>%
      addProviderTiles(providers$CartoDB.Positron)
    
  observeEvent(input$add_module, {
    current_id <- paste0("id_", input$add_module)
    active_modules(c(current_id, active_modules()))
    
    callModule(editMod, map,id = current_id)
    
    insertUI(
      selector = "#add_here",
      ui = editModUI(id = current_id)
    )
  })
  
  observeEvent(input$remove_module, {
    
    # only remove a module if there is at least one module shown
    if (length(active_modules()) > 0) {
      current_id <- active_modules()[1]
      removeUI(
        selector = paste0("#", current_id)
      )
      
      # update the list of currently shown modules
      active_modules(active_modules()[-1])
    }
  })
}

shinyApp(ui, server)

1 ответ

В предоставленном вами коде модуль, загруженный с помощью «add_module», называется не #id_n , а #id_n-map ; вам нужно изменить имя селектора вremoveUIдля:

        removeUI(
    selector = paste0("#", current_id, "-map")
  )

Вы можете проверить идентификатор любого элемента из вашего блестящего приложения, щелкнув правой кнопкой мыши в браузере, выбрав «Проверить элемент» и найдя интересующий элемент.

Другие вопросы по тегам