加载闪亮应用时强制更新输出

时间:2016-02-26 13:36:08

标签: r shiny leaflet shinydashboard

我正在使用传单和shinydashboard创建闪亮的应用程序,其中有多个菜单存在问题leaftletProxy

在这里,我创建了一个示例来展示我的问题(https://gist.github.com/byzheng/074c3c1ff75ea9f951f5)。

在应用程序中,有两个侧边栏菜单1)第一个菜单有一个链接click me; 2)第二个菜单有一个传单地图。单击第一页中的click me后,将启用第二页,然后将setView小册子映射到随机位置。

问题是当第一次点击Couldn't find map with id map并且调用click me时,js控制台会显示错误消息leafletProxy

我认为这个问题与小册子地图在加载闪亮应用时尚未初始化有关。点击多次后,一切都按预期工作。

所以我的问题是如何在加载闪亮的应用程序时强制闪亮来绘制传单地图。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

你应该在你的被动中加need。例如:

need(input$button, "Click the button")

此处的文档:http://shiny.rstudio.com/reference/shiny/latest/validate.html

或者您可以在代理NULL时返回:

if (is.null(proxy)) {
    return(NULL)
}

答案 1 :(得分:1)

这里的问题是,隐藏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)
    })