Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

171
Vistas
aplicación shinyr usando dt, la devolución de llamada de javascript reacciona a observeEvent table_cell_edit

Estoy decidido a aprender R-Shiny, para esto estoy tratando de implementar una tabla editable usando el paquete DT, que lee y escribe las ediciones en una base de datos usando el paquete RSQLite, y esto realmente funciona, así que excluyo esta parte del código del ejemplo a continuación para mejorar drásticamente la legibilidad.

Puedo escribir las ediciones con el enfoque sugerido en el sitio web brillante https://rstudio.github.io/DT/shiny.html que enlaza con los ejemplos en esta página https://yihui.shinyapps.io/DT- editar/ .

Con el siguiente código de código, una vez que edito una celda en línea, puedo imprimir un par de líneas de depuración y usar la función dbExecute() puedo enviar la edición a la base de datos.

 observeEvent(input$data_cell_edit, { info = input$data_cell_edit str(info) print(info) print("Edit Triggered") #Here I write my edits }

Ahora también me gustaría agregar un menú desplegable para editar columnas factoriales, por lo que sugerí seguir el enfoque sugerido en esta respuesta , mostrar el menú desplegable para una sola columna en DT brillante.

Usando el javascript a continuación, puedo reemplazar las celdas con el menú desplegable correspondiente. Sin embargo, el problema aquí es que una vez que se realiza una edición a través del menú desplegable, el evento data_cell_edit no se activa, por lo que no se puede realizar la actualización de la base de datos.

Si bien una opción podría ser encerrar la escritura en la base de datos directamente en el código javascript, la mejor manera para mí sería mejorar ese javascript para activar la devolución de llamada data_cell_edit de alguna manera.

¿Es esto posible en absoluto? Además, por algunas razones

 library(shiny) library(DT) ui <- fluidPage( DT::dataTableOutput('foo'), verbatimTextOutput('sel') ) server <- function(input, output, session) { data <- head(iris, 5) for (i in 1:nrow(data)) { data$species_selector[i] <- as.character(selectInput(paste0("sel", i), "", choices = unique(iris$Species), width = "100px")) } output$foo = DT::renderDataTable( data, escape = FALSE, editable=TRUE, callback = JS("table.rows().every(function(i, tab, row) { var $this = $(this.node()); $this.attr('id', this.data()[0]); $this.addClass('shiny-input-container'); }); Shiny.unbindAll(table.table().node()); Shiny.bindAll(table.table().node());") ) observeEvent(input$foo_cell_edit, { info = input$foo_cell_edit print("event triggered") #Here I write my edits }) } shinyApp(ui, server)

tldr:

con el código anterior, cuando edito una celda normal, activo el evento que escribe "evento activado" en la consola.

cuando edito una celda con el menú desplegable, este evento no se activa.

¿Cómo puedo desencadenar ese evento?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda