2017-09-16 35 views
1

我正在开发一个Shiny应用程序,它有两个组件Sankey图和一个动作按钮,单击按钮时弹出“SaveMsg”对话框。闪亮的应用程序showModal不会弹出renderSankeyNetwork

我看到意外的行为,其中,如果我在一个仪表板中的用户actionbutton和Sankeyvisualization,点击操作按钮,仪表板屏幕变灰。

但是,如果我评论Sankey代码并仅保留UI上的Action按钮,则Action按钮会按预期显示弹出消息“save successfull”。 如果我评论操作按钮代码并仅保留UI中的Sankey代码,则可以在仪表板上看到sankey输出。

Sankey代码和动作按钮都按预期单独工作,但是如果我将两个都放在一个仪表板动作按钮灰显的屏幕仪表板屏幕上。

我还附上样本代码 -

library(shiny) 
library(networkD3) 
library(shinydashboard) 
value <- c(12,21,41,12,81) 
source <- c(4,1,5,2,1) 
target <- c(0,0,1,3,3) 
edges2 <- data.frame(cbind(value,source,target)) 

names(edges2) <- c("value","source","target") 
indx <- c(0,1,2,3,4,5) 
ID <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6') 
nodes <-data.frame(cbind(ID,indx)) 

ui <- dashboardPage(
    dashboardHeader(
), 
    dashboardSidebar(disable = TRUE), 
    dashboardBody(
    fluidPage(
     actionLink("savebtn", "Save button") 
     ,sankeyNetworkOutput("simple") 
    ) 
) 
) 

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

    # Show modal when button is clicked. 
    observeEvent(input$savebtn, { 
    showModal(modalDialog(
     title = "Save successful")) 
    }) 

    output$simple <- renderSankeyNetwork({ 
    sankeyNetwork(Links = edges2, Nodes = nodes, 
        Source = "source", Target = "target", 
        Value = "value", NodeID = "ID" 
        ,units = "SSN") 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

你能提供一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? – jsb

+0

嗨塞缪尔,我更新了完整的可重复代码,点击保存按钮仪表板时灰色了,但是其他操作按钮和sankeyNetworkoutput在用户界面中评论其他时分别显示输出。 –

+0

错误不依赖于您的特定sankey网络,因此您可以使用sankeyNetwork的帮助页面中的简单网络... – shosaco

回答

0

我没有挖成问题,所以我不知道为什么会发生的事情。但是,如果您想要显示的模式只是一些文本(不包含闪亮元素),您可以使用shinyalert,它也可以使用模态(尚未在CRAN上,尚未发布)。这是你使用shinyalert的代码。希望帮助

library(shiny) 
library(networkD3) 
library(shinyalert) 
value <- c(12,21,41,12,81) 
source <- c(4,1,5,2,1) 
target <- c(0,0,1,3,3) 
edges2 <- data.frame(cbind(value,source,target)) 

names(edges2) <- c("value","source","target") 
indx <- c(0,1,2,3,4,5) 
ID <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6') 
nodes <-data.frame(cbind(ID,indx)) 

ui <- dashboardPage(
    dashboardHeader(
), 
    dashboardSidebar(disable = TRUE), 
    dashboardBody(
    fluidPage(
     useShinyalert() 
     ,actionLink("savebtn", "Save button") 
     ,sankeyNetworkOutput("simple") 
    ) 
) 
) 

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

    # Show modal when button is clicked. 
    observeEvent(input$savebtn, { 
    shinyalert("Save successful") 
    }) 

    output$simple <- renderSankeyNetwork({ 
    sankeyNetwork(Links = edges2, Nodes = nodes, 
        Source = "source", Target = "target", 
        Value = "value", NodeID = "ID" 
        ,units = "SSN") 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

Shinyalert不会解决我的问题,其实这里我已经发布修剪版本的问题休闲的代码,在实际代码,我有modalDialog中的“textInput”,点击按钮我希望用户在文本框中输入文本。任何关于如何打开modeldialog的建议都会有所帮助。 –

+0

其实如果你需要一个文本输入,那么也可以用shinyalert来解决。例如:'shinyalert(“hello”,type =“input”,callbackR = function(value){cat(value)})'。我没有时间调试闪亮和网络D3,但我只是提供这种替代方案,因为它可能适合你。 –

0

这个问题已经被报告here,我相信这是类似于报道heresankeyNetwork()使用的JavaScript添加了一个<foreignObject><xhtml:body>...来封装SVG标题,以便在较早版本的IE中使用多行标题。这种结构显然与bootstrap-datepicker的做法相冲突,经过一些测试后,我可以证实这似乎也是这里发生的事情的根源。有一个pull request已经应该解决这个networkD3结束,但它尚未审查和合并。一旦拥有,安装和使用dev版本的networkD3应该可以解决这个问题。我认为这应该也是上游固定的,因为<foreignObject><xhtml:body>...结构似乎是有效的HTML/SVG。

相关问题