Динамически скрывать модуль из пакета в приложении 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")
)
Вы можете проверить идентификатор любого элемента из вашего блестящего приложения, щелкнув правой кнопкой мыши в браузере, выбрав «Проверить элемент» и найдя интересующий элемент.