Удалить actionButton () с помощью функции removeUI () в блестящем - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь использовать функцию removeUI() из блестящего пакета, но у меня возникают некоторые трудности при удалении определенных элементов. Ниже приведен пример этой проблемы, слегка измененный по сравнению с примером в help(removeUI). В частности, закомментированная строка, содержащая textInput(, была заменена на actionButton(.

library(shiny)

ui <- fluidPage(
    sidebarPanel(
      actionButton("rmv", "Remove UI"),
      actionButton("txt", "This is no longer useful")
      #textInput("txt", "This is no longer useful")
    )
)

# Server logic
server <- function(input, output, session) {
  observeEvent(input$rmv, {
    removeUI(
      selector = "div:has(> #txt)"
    )
  })
}

# Complete app with UI and server components
shinyApp(ui, server)

Хотя компоненты textInput() могут быть удалены, этот метод не работает для удаления аналогичных компонентов с помощью actionButton(). Я не уверен, почему, поскольку логика селектора jQuery в этом случае выглядит одинаково.

Я также попытался изменить selector = "div:has(> #txt)" на selector = "button:has(> #txt)", полагая, что поиск jQuery будет применяться к элементам button, но опять же безрезультатно.

РЕДАКТИРОВАТЬ: найдено решение. Обтекание actionButton("txt", "This is no longer useful") с помощью div() помещает кнопку действия в блок div<>, поэтому поиск будет работать.

1 Ответ

0 голосов
/ 07 сентября 2018
  • Сначала некоторые общие вещи, каждый элемент на странице должен иметь уникальный id, вы не можете использовать одно и то же имя для нескольких элементов, как вы делаете для actionButton и textInput. Это правило применяется ко всем HTML-страницам в Интернете.

  • Что касается вопроса, я написал небольшую функцию, которая позволит вам собирать элементы, которые соответствуют определенному шаблону


library(shiny)

ui <- fluidPage(
  sidebarPanel(
    actionButton("rmv", "Remove UI"),
    actionButton("txt", "This is no longer useful"),
    textInput("txt2", "This is no longer useful")
  )
)

# Server logic
server <- function(input, output, session) {

  getInputs <- function(pattern){
    reactives <- names(reactiveValuesToList(input))
    reactives[grep(pattern,reactives)]
  }

  observeEvent(input$rmv, {

    vals <- getInputs("txt")
    vals <- paste0("#",vals)

    removeUI(
      selector = vals,
      multiple = T
    )
  })
}
# Complete app with UI and server components
shinyApp(ui, server)

enter image description here

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