Resumen: cuando coloco un shinyTree (del paquete R del mismo nombre) en un botón dropdownButton (del paquete shinyWidgets ), parece que el árbol en cuestión no es accesible desde la variable de input hasta que el usuario haya interactuado con el árbol en de alguna manera ¿Hay alguna manera de forzar la carga del árbol cuando la aplicación se carga al principio?
Aquí hay un ejemplo mínimo (casi):
library(shiny) library(shinyWidgets) library(shinyTree) library(magrittr) render.as.text <- function(t) { if (is.null(t)) { 'argument is NULL' } else { q <- get_selected(t) if (length(q) == 0) { 'none selected' } else { paste(q, sep=', ', collapse=', ') } } } ui <- fluidPage( dropdownButton(shinyTree('tree', checkbox=TRUE), circle=FALSE, inputId='dd') ) server <- function(input, output, session) { output$tree <- renderTree({ list(OptionA = structure(list(OptionAA='', OptionAB=''), stopened=TRUE), OptionB='') }) updateActionButton(session, 'dd', label='initial label') observe({ updateActionButton(session, 'dd', label=render.as.text(input$tree)) }) %>% bindEvent(input$dd_state) } shinyApp(ui = ui, server = server) Cuando ejecuto esta aplicación, el botón comienza con el texto 'etiqueta inicial' (como se esperaba), luego, cuando hago clic en él la primera vez, el texto cambia a 'el argumento es NULL' (lo que muestra que la variable input$tree tiene un NULL valor), pero el árbol se muestra correctamente en el menú desplegable. Si luego vuelvo a hacer clic en el botón para cerrar el menú desplegable, el texto 'el argumento es NULL' permanece; permanece hasta que realmente seleccione una o más de las casillas de verificación del árbol, después de lo cual (y después de hacer clic en el botón nuevamente) mostrará una coma -lista separada de opciones seleccionadas o 'ninguna seleccionada' como se esperaba.
Me gustaría mucho poder referirme a input$tree comenzando con la primera vez que el usuario realiza alguna acción en la aplicación; idealmente, estoy buscando algún comando para insertar en el servidor o en el código ui (o ambos) que significa que la primera vez que el usuario hace clic en el botón, su texto cambiará directamente a 'ninguno seleccionado' porque input$tree ya no es NULL . es posible?
¿Simplemente cambiar el valor predeterminado de su función render.as.text funcionaría para su propósito?
library(shiny) library(shinyWidgets) library(shinyTree) library(magrittr) render.as.text <- function(t) { if (is.null(t)) { 'none selected' } else { q <- get_selected(t) if (length(q) == 0) { 'none selected' } else { paste(q, sep=', ', collapse=', ') } } } ui <- fluidPage( dropdownButton(shinyTree('tree', checkbox=TRUE), circle=FALSE, inputId='dd') ) server <- function(input, output, session) { output$tree <- renderTree({ list(OptionA = structure(list(OptionAA='', OptionAB=''), stopened=TRUE), OptionB='') }) updateActionButton(session, 'dd', label='initial label') observe({ updateActionButton(session, 'dd', label=render.as.text(input$tree)) }) %>% bindEvent(input$dd_state) } shinyApp(ui = ui, server = server)