Блестящая кнопка действия в заголовке узла visnetwork - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь вставить кнопку действия в узел 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 Ответ

2 голосов
/ 24 апреля 2019

Просто добавьте событие 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 события к другим объектам, кроме кнопки действия. (Также просто в круг вместо использования всплывающего окна).

...