下面的应用程序在启动时和首次单击
"Next Vehicle >" actionButton
时按预期工作。
当我第二次按下操作按钮时,它会按预期选择第三辆车,但是当我打开下拉列表时,先前选择的值“Cadillac Fleetwod”会首先列出,而我希望它会列在第二位。
如果我第三次按下操作按钮,则会正确选择“Chrysler Imperial”,但现在“Camaro Z28”列在第一位,而我原本希望它列在第三位。请注意,如果忽略第一个值,“Cadillac Fleetwood”和“AMC Javelin”是正确的。
如果我完全避免使用操作按钮,而是每次都手动单击,则下拉菜单中的顺序将符合预期。
每次使用操作按钮时,
input$vehicle
中的先前值都会首先列出。如何防止这种情况发生,并在使用该按钮时让我对 input$vehicle
的选择按字母顺序列出,而不管之前的值如何?
library(shiny)
df <- mtcars
df$vehicle <- rownames(df)
df <- df[order(df$vehicle), c("vehicle", colnames(mtcars))]
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectizeInput("vehicle",
"Select vehicle",
choices=NULL,
selected=NULL),
),
mainPanel(
actionButton("nextbut", "Next Vehicle >") ,
)
)
)
server <- function(input, output, session) {
observe({
updateSelectizeInput(session,
"vehicle",
"Select vehicle",
df$vehicle,
selected=df$vehicle[1],
server = T)
})
observeEvent(input$nextbut, {
vehicles <- df$vehicle
idx <- which(vehicles == input$vehicle)
if(idx != length(vehicles)){
updateSelectizeInput(session,
"vehicle",
label = "Select vehicle",
choices = vehicles,
vehicles[idx+1],
server=T
)
}
})
}
# Run the application
shinyApp(ui = ui, server = server)
在用户界面而不是服务器中设置选项可以解决此问题。 server = T 的 updateInputs 正在更改您的输入顺序。
library(shiny)
df <- mtcars
df$vehicle <- rownames(df)
df <- df[order(df$vehicle), c("vehicle", colnames(mtcars))]
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectizeInput("vehicle",
"Select vehicle",
choices=df$vehicle,
selected=NULL),
),
mainPanel(
actionButton("nextbut", "Next Vehicle >") ,
)
)
)
server <- function(input, output, session) {
observe({
updateSelectizeInput(session,
"vehicle",
"Select vehicle",
selected=df$vehicle[1])
})
observeEvent(input$nextbut, {
vehicles <- df$vehicle
idx <- which(vehicles == input$vehicle)
if(idx != length(vehicles)){
updateSelectizeInput(session,
"vehicle",
label = "Select vehicle",
selected = vehicles[idx+1]
)
}
})
}
# Run the application
shinyApp(ui = ui, server = server)