Добавление пользовательских кнопок ActionB для всплывающих окон на листовой карте в блестящем приложении - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать в R блестящее приложение, где пользователи могут узнать подробности о точках на карте. Когда пользователи нажимают на точку, всплывающее окно показывает некоторые начальные детали, а затем ActionButton (или ActionLink). Когда пользователь щелкает этот ActionButton, реактив ObserveEvent запускает модальное диалоговое окно, отображающее дополнительную информацию об этой точке. У меня есть карты, кнопки действий и модальные диалоги. Однако я не могу понять, как «назначить» каждому ActionButton его точку / всплывающее окно на карте. Есть ли способ заставить каждый ActionButton наследовать свой идентификатор от соответствующей точки на карте и затем передавать эту информацию в ObserveEvent, который запускает модальный диалог? Рабочий пример ниже:

library(shiny)
library(leaflet)
library(DT)

##Setup##
mapdata <- quakes
mapdata$latitude <- as.numeric(mapdata$lat)
mapdata$longitude <- as.numeric(mapdata$long)

ui <- fluidPage(
    leafletOutput("mymap")
)

server <- function(input, output, session) {

    observeEvent(input$button_click, {
        showModal(modalDialog(
            title = "More Details",
            renderDataTable({
                df <- mapdata[1,]
                x <- as.data.frame(cbind(colnames(df),t(df)),row.names = F);colnames(x) <- c("Field","Value")
                x
            })
        ))
    })

    output$mymap <- renderLeaflet({
        leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
            addMarkers(lat = ~ latitude, lng = ~ longitude,
                       data = mapdata,
                       popup= ~paste("<b>", mag, "</b></br>", actionLink(inputId = "modal", label = "View Details", onclick = 'Shiny.setInputValue(\"button_click\", this.id, {priority: \"event\"})')))
    })
}

###How can I assign an inputID to each action link that matches the id for that action links point?

shinyApp(ui, server)
...