Выбирайте определенный элемент из selectInput () всегда, когда он отключен checkboxInput () - PullRequest
0 голосов
/ 21 марта 2020

Допустим, у меня ниже Shiny приложение -

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    checkboxInput("checkbox", label = "Choice a value", value = TRUE),
    selectInput("variable", "Variable:",
                c("Cylinders" = "cyl",
                  "Transmission" = "am",
                  "Gears" = "gear"))
  ),
  server = function(input, output) {
    observeEvent(input$checkbox, {
            toggleState("variable")
        })
  }
)

Теперь я хочу, чтобы при нажатии checkbox всегда выбиралось Cylinders из variable.

При вышеуказанном подходе этого не происходит. В настоящее время, когда пользователь выбирает другое значение ig Gears после включения variable, а затем снова пользователь переходит к checkbox для отключения variable, выбор Gears остается в пользовательском интерфейсе, который я не хочу и хочу go обратно на Cylinders мгновенно каждый раз, когда variable отключен.

Любой указатель, как выполнить sh, это будет высоко оценено.

Обновлено после bretauv's ответ -

Его ответ прекрасно работает с shiny's native selectInput(), однако, кажется, не работает, если я использую shinyWidgets пакета pickerInput(), как показано ниже -

library(shiny)
library(shinyjs)
library(shinyWidgets)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    checkboxInput("checkbox", label = "Choice a value", value = FALSE),
    pickerInput("variable", "Variable:",
                c("Cylinders" = "cyl",
                  "Transmission" = "am",
                  "Gears" = "gear"),
                 width = "50%",
                selected = "gear")
  ),
  server = function(input, output, session) {
    observe({
            if (input$checkbox) {
                    toggleState(id = "variable")
                } else {
                    toggleState(id = "variable")
                    updatePickerInput(session = session,
                                        inputId = "variable", label = NULL,  
                                        choices = c("Cylinders" = "cyl",
                                                      "Transmission" = "am",
                                                      "Gears" = "gear"),
                                        selected = "Cylinders")
                }
            })
  }
)

Любой указатель для решения этой проблемы будет высоко оценен.

1 Ответ

1 голос
/ 21 марта 2020

Вы можете использовать updateSelectInput (не забудьте добавить session в function(input, output, session)). Кроме того, вам необходимо детализировать ситуацию, когда checkboxInput равен TRUE или FALSE.

. Код ниже должен работать:

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    checkboxInput("checkbox", label = "Choice a value", value = FALSE),
    selectInput("variable", "Variable:",
                c("Cylinders" = "cyl",
                  "Transmission" = "am",
                  "Gears" = "gear"),
                selected = "gear")
  ),
  server = function(input, output, session) {
    observe({
      if(input$checkbox == "TRUE"){
        toggleState(id = "variable")
      }

      else if(input$checkbox == "FALSE"){
        toggleState(id = "variable")
        updateSelectInput(session = session,
                          inputId = "variable",
                          choices = c("Cylinders" = "cyl",
                                      "Transmission" = "am",
                                      "Gears" = "gear"),
                          selected = "cyl")
      }

    })
  }
)
...