Включить / отключить блестящий виджет на основе значений 2 других виджетов - PullRequest
1 голос
/ 07 апреля 2020

Я хочу включить / отключить Shiny widget на основе значений 2 других widgets, как показано ниже -

library(shiny)
library(shinyWidgets)

shinyApp(
    ui = fluidPage(
      useShinyjs(),

      prettyCheckbox(inputId = "Check1", label = "A"),
      prettyCheckbox(inputId = "Check2", label = "B"),
      uiOutput("Date_UI")
    ),
    server = function(input, output) {



      output$Date_UI = 
        renderUI(dateInput(inputId = "Date", 
                            label = NULL, 
                            width = "80%",
                            value = Sys.Date(), 
                            min = Sys.Date() - 10, 
                            max = Sys.Date() + 10) 
              )

      observeEvent(c( 
            input$Check1,
            input$Check2
            ), 
            {
              if (input$Check1 || input$Check2) {
                  enable('Date')
                } else {
                  disable('Date')
                }
            })


    }
  )

При этом я хочу, чтобы, если любой из Check1 и Check2 будет нажата, тогда Date будет включено. Так что, если оба не были выбраны, Date будет отключен. GUI должно начинаться с Date отключено.

Очевидно, что это не происходит с приведенным выше кодом? Не могли бы вы помочь указать, что пошло не так?

1 Ответ

0 голосов
/ 07 апреля 2020

Насколько я могу судить, ваш код работает, за исключением начальной загрузки приложения. Оберните вызов dateInput на сервере с отключено () (блестящая js функция), чтобы изначально отключить его при загрузке:

output$Date_UI = 
      renderUI(disabled(dateInput(inputId = "Date", 
                         label = NULL, 
                         width = "80%",
                         value = Sys.Date(), 
                         min = Sys.Date() - 10, 
                         max = Sys.Date() + 10))
...