加载闪亮的应用程序时强制更新输出
Force to update output when shiny app is loading
我正在使用 leaflet 和 shinydashboard 创建有多个菜单的 shiny 应用程序,这些菜单存在 leaftletProxy
的问题。
这里我创建了最小示例来展示我的问题 (https://gist.github.com/byzheng/074c3c1ff75ea9f951f5)。
在应用程序中,有两个侧边栏菜单 1) 第一个菜单有一个 link click me
; 2)第二个菜单有传单图。在第一页点击click me
后,第二页被启用,然后setView
的传单映射到一个随机的地方。
问题是第一次点击click me
调用leafletProxy
时js控制台报错Couldn't find map with id map
。
我认为这个问题与加载闪亮应用时未初始化传单地图有关。单击多次后,一切都按预期工作。
所以我的问题是如何在 shiny 应用程序加载时强制 shiny 绘制传单地图。
感谢您的任何建议。
你应该在你的反应中放一个 need
。例如:
need(input$button, "Click the button")
此处的文档:http://shiny.rstudio.com/reference/shiny/latest/validate.html
或者您可以 return 当代理是 NULL
:
if (is.null(proxy)) {
return(NULL)
}
这里的问题是创建传单地图的代码在 output$map
被隐藏时暂停。
解决此问题的一种方法是使用:
outputOptions(output,"map",suspendWhenHidden=FALSE)
不幸的是,这现在似乎有问题,但很快就会修复,它目前会抛出一个 js 错误 (see here)。
由于 output$summary
似乎是 renderLeaflet
之后的 运行,您可以在该块中使用 setView
作为临时解决方案。
output$summary <- renderPrint({
leafletProxy('map') %>% setView(runif(1) * 30 +2, runif(1) * 30 + 2, 7)
print(input$mydata)
print(leafletProxy('map')$id)
})
我正在使用 leaflet 和 shinydashboard 创建有多个菜单的 shiny 应用程序,这些菜单存在 leaftletProxy
的问题。
这里我创建了最小示例来展示我的问题 (https://gist.github.com/byzheng/074c3c1ff75ea9f951f5)。
在应用程序中,有两个侧边栏菜单 1) 第一个菜单有一个 link click me
; 2)第二个菜单有传单图。在第一页点击click me
后,第二页被启用,然后setView
的传单映射到一个随机的地方。
问题是第一次点击click me
调用leafletProxy
时js控制台报错Couldn't find map with id map
。
我认为这个问题与加载闪亮应用时未初始化传单地图有关。单击多次后,一切都按预期工作。
所以我的问题是如何在 shiny 应用程序加载时强制 shiny 绘制传单地图。
感谢您的任何建议。
你应该在你的反应中放一个 need
。例如:
need(input$button, "Click the button")
此处的文档:http://shiny.rstudio.com/reference/shiny/latest/validate.html
或者您可以 return 当代理是 NULL
:
if (is.null(proxy)) {
return(NULL)
}
这里的问题是创建传单地图的代码在 output$map
被隐藏时暂停。
解决此问题的一种方法是使用:
outputOptions(output,"map",suspendWhenHidden=FALSE)
不幸的是,这现在似乎有问题,但很快就会修复,它目前会抛出一个 js 错误 (see here)。
由于 output$summary
似乎是 renderLeaflet
之后的 运行,您可以在该块中使用 setView
作为临时解决方案。
output$summary <- renderPrint({
leafletProxy('map') %>% setView(runif(1) * 30 +2, runif(1) * 30 + 2, 7)
print(input$mydata)
print(leafletProxy('map')$id)
})