R Shiny selectizeInput:设置最小输入量

时间:2018-06-27 10:16:33

标签: javascript r shiny selectize.js

我在闪亮的应用程序中有一个selectizeInputmultiple = TRUE,并且我想阻止用户选择NULL(即,使其空白)。我的目标是确保至少选择一个(emem)项(无论哪个)。

我发现了this关于另一个问题的问题(即限制了最大个选择项),然后我检查了selectize documentation。不幸的是,似乎没有minItems选项。有没有办法实现我想要的功能?

最小示例:

library(shiny)
shinyApp(

  ui = fluidPage(
    selectizeInput(
      inputId = "testSelect",
      label = "Test",
      choices = LETTERS[1:4],
      selected = LETTERS[1],
      multiple = TRUE,
      # Problem: how to specify 'minItems' here
      options = list(maxItems = 2)
    ),
    verbatimTextOutput("selected")
  ),

  server = function(input, output) {
    output$selected <- renderPrint({
      input$testSelect
    })
  }

)

1 个答案:

答案 0 :(得分:1)

似乎是一个未解决的问题:#https://github.com/selectize/selectize.js/issues/1228

关于R / Shiny实现,您可以对renderUI()使用解决方法。

您将在服务器端构建输入并控制所选的选项。 在服务器端构建输入之前,您可以检查当前值,如果它不满足要求,则可以覆盖它:

selected <- input$testSelect
if(is.null(selected)) selected <- choices[1]

可复制的示例:

library(shiny)
choices <- LETTERS[1:4]  
shinyApp(
  ui = fluidPage(
    uiOutput("select"),
    verbatimTextOutput("selected")
  ),
  server = function(input, output) {
    output$selected <- renderPrint({
      input$testSelect
    })

    output$select <- renderUI({
      selected <- input$testSelect
      if(is.null(selected)) selected <- choices[1]
      selectizeInput(
        inputId = "testSelect",
        label = "Test",
        choices = choices,
        selected = selected,
        multiple = TRUE,
        options = list(maxItems = 2)
      )
    })
  }
)