Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

166
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda