Инициализация скрытых элементов с ShinyJS - PullRequest
0 голосов
/ 16 октября 2019

Я хотел бы скрыть элемент при запуске блестящего приложения, но в отличие от этого примера скрываемый элемент является частью более крупного элемента, который видим.

ВВ этом примере элемент, который должен быть скрыт в начале, - это элемент управления рисованием, который является частью карты листовки. Есть кнопка, которая переключает видимость элемента управления рисунком - как я могу запустить его со скрытым элементом управления рисунком? Полный код приложения приведен ниже.

enter image description here

library(rbgm)
library(leaflet)
library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  leafletOutput("mymap"),
  actionBttn("toggle_button", "Toggle drawing")
)

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

  output$mymap <- renderLeaflet({
    set.seed(2)
    fs <- sample(bgmfiles::bgmfiles(), 1)

    model <- boxSpatial(bgmfile(fs))
    model <- spTransform(model, "+init=epsg:4326")

    m <- leaflet() %>% addTiles() 

    m <- m %>% addPolygons(data = model, group = 'model') %>%     
      addDrawToolbar(targetGroup = 'model',
                     editOptions = editToolbarOptions(
                       selectedPathOptions = selectedPathOptions()))
    m
  })

  observe({
    shinyjs::hide(selector = "div.leaflet-draw") # <---- this doesn't hide the draw controls at the start!!
  })

  observeEvent(input$toggle_button, {
    shinyjs::toggle(selector = "div.leaflet-draw")
  })

}

shinyApp(ui, server)

Я пытался использовать observe, чтобы скрыть элемент в начале, однаконичего не делает, предположительно потому, что элемент управления рисованием загружается после срабатывания события наблюдения.

1 Ответ

1 голос
/ 16 октября 2019

Вы можете сделать

shinyjs::delay(0, shinyjs::hide(selector = "div.leaflet-draw"))

(без наблюдателя).


РЕДАКТИРОВАТЬ

Другое решение:

js <- "
$(document).on('shiny:value', function(e){
  if(e.name === 'mymap'){
    setTimeout(function(){$('div.leaflet-draw').hide();}, 0);
  }
});
"

ui <- fluidPage(
  useShinyjs(),
  tags$head(tags$script(js)),
  leafletOutput("mymap"),
  ...
...