Как убрать «вход» после удаления элемента с помощью removeUI - PullRequest
0 голосов
/ 23 июня 2018

Как очистить «input» (verbatimTextOutput («summary») в примере ниже) после удаления какого-либо элемента.Я попробовал кое-что, используя shiny.unbindAll без успеха.выделенный removeUI не делает работу.Пожалуйста, посмотрите на этот пример:

library(shiny)

ui <- fluidPage(

    actionButton('insertBtn', 'Insert'), 
    actionButton('removeBtn', 'Remove'), 
    verbatimTextOutput("summary"),
    tags$div(id = 'placeholder') 

)

server <- function(input, output, session) {
  ## keep track of elements inserted and not yet removed
  inserted <- c()

  observeEvent(input$insertBtn, {
    btn <- input$insertBtn
    id <- paste0('txt', btn)
    insertUI(
      selector = '#placeholder',
      ## wrap element in a div with id for ease of removal
      ui = tags$div(
        actionButton(inputId = paste0("truc",id),label = paste0("truc",id)), 
        id = id
      )
    )
    inserted <<- c(id, inserted)
  })

  observeEvent(input$removeBtn, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted[length(inserted)])
    )
    inserted <<- inserted[-length(inserted)]
  })


  output$summary <- renderPrint({
    invalidateLater(1000)
    lst <- reactiveValuesToList(input) 
    message("upd")
    lst[order(names(lst))]
  })
}

shinyApp(ui, server)

Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Если вы абсолютно хотите удалить созданные вами входные данные, мое решение не поможет (хотя вы все равно можете использовать решение Бертиля Барона).Однако, если вы просто хотите очистить входы (не удаляя их), я бы предложил следующее:

library(shiny)

ui <- fluidPage(

  actionButton('insertBtn', 'Insert'), 
  actionButton('removeBtn', 'Remove'), 
  verbatimTextOutput("summary"),
  tags$div(id = 'placeholder') 

)

server <- function(input, output, session) {
  ## keep track of elements inserted and not yet removed
  inserted <- reactiveVal(0)

  observeEvent(input$insertBtn, {
    inserted(inserted() + 1)
    id <- paste0('txt', inserted())
    insertUI(
      selector = '#placeholder',
      ## wrap element in a div with id for ease of removal
      ui = tags$div(
        actionButton(inputId = paste0("truc", id), label = paste0("truc", id)), 
        id = id
      )
    )
  })

  observeEvent(input$removeBtn, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#txt', inserted())
    )
    inserted(inserted() - 1)
  })


  output$summary <- renderPrint({
    invalidateLater(1000)
    lst <- isolate(reactiveValuesToList(input) )
    message("upd")
    lst[order(names(lst))]
  })
}

shinyApp(ui, server)
0 голосов
/ 25 июня 2018

Вы можете использовать shinyjs для изменения входов.Будет ли что-то вроде этой работы?

library(shiny)
library(shinyjs)

ui <- fluidPage(

  actionButton('insertBtn', 'Insert'), 
  actionButton('removeBtn', 'Remove'), 
  verbatimTextOutput("summary"),
  tags$div(id = 'placeholder'), 
  useShinyjs()

)

server <- function(input, output, session) {
  ## keep track of elements inserted and not yet removed
  inserted <- c()

  observeEvent(input$insertBtn, {
    btn <- input$insertBtn
    id <- paste0('txt', btn)
    insertUI(
      selector = '#placeholder',
      ## wrap element in a div with id for ease of removal
      ui = tags$div(
        actionButton(inputId = paste0("truc",id),label = paste0("truc",id)), 
        id = id
      )
    )
    inserted <<- c(id, inserted)
  })

  observeEvent(input$removeBtn, {
    id <- inserted[length(inserted)]
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#',id)
    )
    #use the javascript functio Shiny.onInputChange to set the values of 
    # the removed inputs to NULL, javascript uses lower case for null
    runjs(paste0("Shiny.onInputChange('",paste0("truc",id),"',null)"))
    inserted <<- inserted[-length(inserted)]
  })


  output$summary <- renderPrint({
    invalidateLater(1000)
    lst <- reactiveValuesToList(input) 
    message("upd")
    lst[order(names(lst))]
  })
}

shinyApp(ui, server)

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...