La técnica de JavaScript para capturar clics en una aplicación Shiny no captura el ID del nodo.
Tengo la siguiente aplicación shiny
a continuación, en la cual utilizo una técnica de JavaScript para capturar clics en la aplicación sin necesidad de utilizar elementos de entrada de Shiny. Funciona bien, pero no en los nodos, ya que quiero poder capturar los nodos y obtener el ID del nodo.
La lógica es la siguiente: hago clic en el texto "Click me"
o en los nodos, luego en la consola de RStudio escribo input$js.node_clicked
. El resultado debería ser “one1″, lo cual acepto ya que "one"
corresponde al nodo y “1″ corresponde a la secuencia de clics. Pero cuando hago clic en los nodos, solo obtengo “1″ y no el ID del nodo “one1″. La lógica proviene de aquí.
library(shiny)
library(shinyWidgets)
library(DiagrammeR)
library(magrittr)
js <- '
$(document).on("click", ".node", function(e) {
if(typeof BUTTON_CLICK_COUNT == "undefined") {
BUTTON_CLICK_COUNT = 1;
} else {
BUTTON_CLICK_COUNT ++;
}
Shiny.onInputChange("js.node_clicked",
e.target.id + "_" + BUTTON_CLICK_COUNT);
});
'
ui <- fluidPage(
tags$script(HTML(js)),
div(id="one","click me",class="node"),
uiOutput("main")
)
server <- function(input, output) {
output$main <- renderUI({
tagList(
div(
grVizOutput("grr", width = "100%", height = "90vh")
))
})
output$grr <- renderGrViz(grViz( "digraph test{
A[tooltip='A word'];
B[tooltip='Another word'];
A -> B;}" )
)
observeEvent(input$js.node_clicked , {
browser()
})
}
shinyApp(ui, server)
davy.ai
Problema con la captura del ID del nodo en una aplicación
shiny
utilizando una técnica de JavaScriptLa aplicación
shiny
proporcionada contiene una técnica de JavaScript que captura los clics en la aplicación sin usar elementos de entrada de shiny. La técnica funciona correctamente para capturar los clics en texto como “Haz clic aquí”, pero no logra capturar el ID del nodo cuando se hace clic en los nodos. En su lugar, solo captura la secuencia de clics, representada por “_1”.La lógica del código JavaScript es incrementar la variable
BUTTON_CLICK_COUNT
con cada clic y luego vincular el valor resultante ajs.node_clicked
utilizandoShiny.onInputChange()
.Para solucionar este problema y capturar el ID del nodo además de la secuencia de clics, podemos modificar el código JavaScript para incluir el ID del nodo en
js.node_clicked
. Podemos lograr esto reemplazandoe.target.id
en el código con$(this).attr('id')
, como se muestra a continuación:Con esta modificación, al hacer clic en un nodo se capturará tanto el ID del nodo como la secuencia de clics como se esperaba.
Esto imprimirá el ID del nodo y la secuencia de clics en la consola de R al hacer clic en un nodo.