代码之家  ›  专栏  ›  技术社区  ›  Bangyou

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

  •  2
  • Bangyou  · 技术社区  · 9 年前

    我正在使用传单和shinydashboard创建闪亮的应用程序,它有多个菜单 leaftletProxy .

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

    在应用程序中,有两个侧栏菜单1)第一个菜单有一个链接 click me ; 2) 第二个菜单有一张传单地图。单击后 单击我 在第一页中,启用第二页,然后 setView 将传单地图移动到随机位置。

    问题是js控制台有一条错误消息 Couldn't find map with id map 单击我 第一次单击 leafletProxy 被调用。

    我认为这个问题与闪亮应用程序加载时传单地图未初始化有关。单击多次后,一切都按预期运行。

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

    谢谢你的建议。

    2 回复  |  直到 9 年前
        1
  •  2
  •   NicE    9 年前

    这里的问题是创建传单地图的代码被暂停 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)
        })
    
        2
  •  1
  •   sdgfsdh    9 年前

    你应该放一个 need 在你的反应中。例如:

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

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

    或者,您可以在代理为 NULL :

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