R Shiny - отключить/использовать shinyUI элементы

Я ищу способ реализовать функции отключения/удаления поверх моих элементов shinyUI. Здесь xiaodaigh дает подсказку, как отключить /actionButton (см. Изображение ниже), и это мой желаемый результат, но код не выполняет трюк с другими элементами gui, которые я тестировал (например, numericInput).

(Я знаю conditionalPanel функцию Panel, но это не тот эффект, который я хотел бы иметь.)

Я был бы очень признателен за любые предложения, особенно потому, что я не очень хорошо знаком с JavaScript.

enter image description here

Ответ 1

Причина, по которой код, на который вы ссылаетесь в своем вопросе, не работает для других виджетов ввода, заключается в том, что для разных входных виджетам нужны разные вызовы JavaScript, чтобы отключиться. Еще одна проблема заключается в том, что когда блестящий создает элемент ввода, иногда идентификатор, который вы указываете, является идентификатором фактического тега ввода HTML, а иногда этот идентификатор присваивается контейнеру входного тега.

В пакете shinyjs есть функция disable которая будет работать как есть с любым блестящим вводом. Отказ от ответственности: я написал этот пакет.

Вот как вы могли бы отключить numericInput как вы просили

library(shiny)
runApp(shinyApp(
  ui = fluidPage(
    shinyjs::useShinyjs(),
    numericInput("test", "Test", 5),
    actionButton("submit", "Choose")
  ),
  server = function(input, output, session) {
    observeEvent(input$submit, {
      shinyjs::disable("test")
    })
  }
))

Ответ 2

как насчет того, когда ваши элементы "исчезают", когда определенное условие FALSE.

Если это ваше намерение, вы можете добавить это на свой сервер.

output$sliderInputUI <- renderUI({
    if (condition == TRUE) {
        sliderInput("id", "text", 
             min = 1, max = 8, 
             value = 1, step = 1
        )
    }
})

Добавьте это в свой ui.R htmlOutput ("sliderInputUI")

sliderInput будет отображаться только в вашем ui, когда условие TRUE.