如何让传单在切换菜单项时渲染?

问题描述 投票:0回答:1

一个基本的 R Shiny“仪表板”应用程序,带有 2 个侧边栏菜单项,其中一个包含 Leaflet 小部件输出。

重现的错误是-

  1. 从 R Studio 运行此代码(确保 R Studio IDE 最大化到屏幕)。
  2. 最大化运行时窗口。
  3. 切换到空白菜单项选项卡。
  4. 缩小窗口,最大化窗口。
  5. 使用 Leaflet 小部件切换回原始菜单项选项卡。

如果错误重现,地图将不会完全渲染,留下一堆空白。这只能通过再次最小化和最大化窗口来解决。

library(leaflet)
library(magrittr)
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard"),
      menuItem("blankMenuItem", tabName = "blank")
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "dashboard",
              leafletOutput("map")),
  
      tabItem(tabName = "blank")
    )
  )
)

server <- function(input, output) { 

  output$map <- renderLeaflet({

    leaflet() %>%
      addTiles() %>%  # Add default OpenStreetMap map tiles
      addMarkers(lng = 174.768, lat = -36.852, popup="The birthplace of R") 

  })
  }

shinyApp(ui, server)

enter image description here enter image description here enter image description here enter image description here enter image description here

您知道为什么会出现这种行为吗?

r shiny r-leaflet
1个回答
1
投票

在查看半相关问题后能够调整其大小此处。此解决方案会影响所有侧边栏菜单项,修复非渲染传单。使用调整大小事件,不需要用户物理调整窗口大小。

dashboardBody() 内部:

shiny::includeScript("mapresize.js")

mapresize.js 内容:

$(document).on('click', '.sidebar-menu li', function() {
    window.dispatchEvent(new Event("resize"));
});
© www.soinside.com 2019 - 2024. All rights reserved.