Shiny: يختفي العنصر النائب selectizeInput عندما يكون متعدد = FALSE

تم إنشاؤها على ٤ مايو ٢٠١٦  ·  5تعليقات  ·  مصدر: rstudio/shiny

عند تحديد selectizeInput مع عنصر نائب ، فإن الاختيارات = NULL ، و selected = NULL ، و multiple = FALSE يتم تحديثها بحيث تحتوي على مجموعة من الاختيارات بطول> 0 ، ويختفي العنصر النائب ويصبح العنصر الأول من الاختيارات هو القيمة المحددة. أريد بقاء العنصر النائب وتحديده = NULL ، نظرًا لأنه تم تحديث الخيارات فقط ، وليس الوسيطة المحددة.

ومع ذلك ، إذا كانت متعددة = TRUE ، فعند إضافة الاختيارات ، يظل العنصر النائب محددًا ويظل فارغًا.

يوجد أدناه مثال بسيط: عند تحميل واجهة المستخدم ، يحتوي selectizeInput على عنصر نائب ، والخيارات = NULL ومتعددة = FALSE. عند تحديد المربع ، يقوم الخادم بتحديث الخيارات لتكون c ("var1" ، "var2" ، "var3" ، ولكن لا يتم تحديث المحدد ، ومع ذلك يختفي العنصر النائب ويتم تحديد "var1" بشكل افتراضي. يحدث هذا حتى إذا أحدد المحدد = NULL في استدعاء updateSelectizeInput.

هل هذا خطأ أم مقصود؟ هل هناك طريقة للاحتفاظ بعنصر نائب ولا شيء محددًا بعدة = خطأ؟

library(shiny)

ui <- shinyUI(fluidPage(

  # Application title
  titlePanel("selectizeInput demo"),

  # Sidebar with a slider input for number of bins
  sidebarLayout(
    sidebarPanel(
      selectizeInput(
        inputId = "variable",
        label = h3("Treatment variable"),
        choices = NULL,
        multiple = FALSE,
        selected = NULL,
        options = list(placeholder = "This is a placeholder")
      ),

      checkboxInput(
        inputId = "add_choices",
        label   = "Add choices",
        value   = FALSE)
    ),
    mainPanel = NULL
  )
))

server <- shinyServer(function(input, output, session) {

  observe({
    if (input$add_choices) {

      updateSelectizeInput(
        session = session,
        inputId = "variable",
        choices = paste0("var", 1:3),
        selected = NULL)
    }
  })

})

shinyApp(ui = ui, server = server)

التعليق الأكثر فائدة

يبدو أنه يمكن حل هذا بطريقة عكسية إلى حد ما عن طريق تعيين مضاعف = TRUE ولكن بما في ذلك خيار selectize.js maxItems = 1. يظل العنصر النائب ، ولكن لا يزال عدد العناصر محددًا عند 1 ، كما لو كان متعددًا بشكل فعال = FALSE .

selectizeInput(
        inputId = "variable",
        label = h3("Treatment variable"),
        choices = NULL,
        multiple = TRUE,
        selected = NULL,
        options = list(
            placeholder = "This is a placeholder",
            maxItems = 1)
      )

ال 5 كومينتر

يبدو أنه يمكن حل هذا بطريقة عكسية إلى حد ما عن طريق تعيين مضاعف = TRUE ولكن بما في ذلك خيار selectize.js maxItems = 1. يظل العنصر النائب ، ولكن لا يزال عدد العناصر محددًا عند 1 ، كما لو كان متعددًا بشكل فعال = FALSE .

selectizeInput(
        inputId = "variable",
        label = h3("Treatment variable"),
        choices = NULL,
        multiple = TRUE,
        selected = NULL,
        options = list(
            placeholder = "This is a placeholder",
            maxItems = 1)
      )

mdec تبدو

نعم ، سأعيد فتحه ، لأنه يبدو أنه يستحق الإصلاح.

اتضح أنه يمكنك الحصول على العنصر النائب باستخدام selected=character(0) بدلاً من selected=NULL .

selected = character(0), multiple = FALSE,
options = list(create = TRUE, placeholder = 'choose an option')

لا يعمل بالنسبة لي. كان علي استخدام الحل البديل. لكن الحل لا يسمح لي بتنفيذ الكتابة بخيار واحد فقط عند تحديث واجهة المستخدم

updateSelectizeInput

سيكون الحل "النظيف" هو الأفضل IMO

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات