عند تحديد 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)
)
mdec تبدو
نعم ، سأعيد فتحه ، لأنه يبدو أنه يستحق الإصلاح.
اتضح أنه يمكنك الحصول على العنصر النائب باستخدام selected=character(0)
بدلاً من selected=NULL
.
selected = character(0), multiple = FALSE,
options = list(create = TRUE, placeholder = 'choose an option')
لا يعمل بالنسبة لي. كان علي استخدام الحل البديل. لكن الحل لا يسمح لي بتنفيذ الكتابة بخيار واحد فقط عند تحديث واجهة المستخدم
updateSelectizeInput
سيكون الحل "النظيف" هو الأفضل IMO
التعليق الأكثر فائدة
يبدو أنه يمكن حل هذا بطريقة عكسية إلى حد ما عن طريق تعيين مضاعف = TRUE ولكن بما في ذلك خيار selectize.js maxItems = 1. يظل العنصر النائب ، ولكن لا يزال عدد العناصر محددًا عند 1 ، كما لو كان متعددًا بشكل فعال = FALSE .