visnetwork节点标题中的闪亮操作按钮

时间:2019-04-11 14:02:46

标签: javascript r shiny visnetwork

我正在尝试将动作按钮嵌入visNetwork节点中,以便可以通过单击工具提示中的按钮来启动动作。

我可以使该按钮出现在节点标签内,但是单击该按钮时不会触发任何事件。我要去哪里错了?

最小示例:

library(shiny)  
library(visNetwork)

ui <- fluidPage(
    visNetworkOutput("net")
)

server <- function(input, output) {

    ## minimal nodes and edges example
    nodes <- data.frame(id = 1, title = HTML("<button id='test' type='button' class='btn btn-default action-button'>test</button>"))
    edges <- data.frame(from = c(1,1))

    ## render the single-node network
    output$net = renderVisNetwork(visNetwork(nodes, edges))

    ## detect when the actionbutton is clicked
    observeEvent(input$test, {
        print("clicked")
    })
}


shinyApp(ui,server)

1 个答案:

答案 0 :(得分:2)

只需向按钮添加onclick事件。您可以在此处触发JavaScript,并根据需要使用Shiny.oninputchange()创建一个input$test。由于input$test仅在您发送的值发生更改时才被触发,因此您应Math.random()生成(可变)随机值。

可复制的示例:

 library(shiny)  
 library(visNetwork)

 ui <- fluidPage(
     visNetworkOutput("net")
 )

 server <- function(input, output) {

  ## minimal nodes and edges example
  nodes <- data.frame(id = 1, title = HTML("<button id='test' type='button'
     class='btn btn-default action-button' onclick ='Shiny.onInputChange(\"test\", 
     Math.random());'>test</button>"))
  edges <- data.frame(from = c(1,1))

  ## render the single-node network
  output$net = renderVisNetwork(visNetwork(nodes, edges))

  ## detect when the actionbutton is clicked
  observeEvent(input$test, {
      print("clicked")
  })
}

 shinyApp(ui,server)

注意:

我不确定您的总体目标是什么,并且可能不需要此注释,而只是一个指针,您可以将onclick事件绑定到除操作按钮之外的其他对象。 (也可以是圆圈,而不是使用弹出窗口)。