如何在恢复时保留 selectInput 变量的顺序?
How to preserve order of selectInput variables on restore?
我注意到从书签恢复应用程序时,选择输入选项的排序方式不正确。我发现这是一个known issue。但是,我正在尝试找到解决此问题的方法。例如,在下面的屏幕截图中,我按顺序输入了 8、7、6、5、4、3、2 和 1。但是在恢复它时,顺序默认为 1、2、3、4、5、6、7 , 8.
截图
代码
library(shiny)
ui <- function(request) {
fluidPage(
verticalLayout(
div(style = "height: 20vh"),
div(style = "height: 40vh;",
htmlOutput("text", style = "text-align: center;")
),
div(style = "display: flex; justify-content: center;",
div(style = "display: inline-block; vertical-align: top;",
selectInput("vars",
"Select variables",
multiple = TRUE,
choices = c(1, 2, 3, 4, 5, 6, 7, 8)),
bookmarkButton())
)))
}
server <- function(input, output) {
output$text <- renderText({
paste0("<p>", input$vars, "</p>")
})
}
shinyApp(ui, server, enableBookmarking = "url")
如果您阅读 Advanced bookmarking,它暗示可以使用 onRestored
覆盖正常行为。两个更改:将 session
添加到您的服务器组件,并添加一个 onRestored()
块。
library(shiny)
ui <- function(request) {
fluidPage(
verticalLayout(
div(style = "height: 20vh"),
div(style = "height: 40vh;",
htmlOutput("text", style = "text-align: center;")
),
div(style = "display: flex; justify-content: center;",
div(style = "display: inline-block; vertical-align: top;",
selectInput("vars",
"Select variables",
multiple = TRUE,
choices = c(1, 2, 3, 4, 5, 6, 7, 8)),
bookmarkButton())
)))
}
server <- function(input, output, session) {
onRestored(function(state) {
updateSelectInput(session, "vars", selected = state$input$vars)
})
output$text <- renderText({
paste0("<p>", input$vars, "</p>")
})
}
shinyApp(ui, server, enableBookmarking = "url")
(我还用 onRestore
测试了这个(没有尾随 d
),它也在那里工作。文档明确建议使用 onRestored
调用 update*
功能,所以我会在不知道确切原因的情况下使用它。)
我注意到从书签恢复应用程序时,选择输入选项的排序方式不正确。我发现这是一个known issue。但是,我正在尝试找到解决此问题的方法。例如,在下面的屏幕截图中,我按顺序输入了 8、7、6、5、4、3、2 和 1。但是在恢复它时,顺序默认为 1、2、3、4、5、6、7 , 8.
截图
代码
library(shiny)
ui <- function(request) {
fluidPage(
verticalLayout(
div(style = "height: 20vh"),
div(style = "height: 40vh;",
htmlOutput("text", style = "text-align: center;")
),
div(style = "display: flex; justify-content: center;",
div(style = "display: inline-block; vertical-align: top;",
selectInput("vars",
"Select variables",
multiple = TRUE,
choices = c(1, 2, 3, 4, 5, 6, 7, 8)),
bookmarkButton())
)))
}
server <- function(input, output) {
output$text <- renderText({
paste0("<p>", input$vars, "</p>")
})
}
shinyApp(ui, server, enableBookmarking = "url")
如果您阅读 Advanced bookmarking,它暗示可以使用 onRestored
覆盖正常行为。两个更改:将 session
添加到您的服务器组件,并添加一个 onRestored()
块。
library(shiny)
ui <- function(request) {
fluidPage(
verticalLayout(
div(style = "height: 20vh"),
div(style = "height: 40vh;",
htmlOutput("text", style = "text-align: center;")
),
div(style = "display: flex; justify-content: center;",
div(style = "display: inline-block; vertical-align: top;",
selectInput("vars",
"Select variables",
multiple = TRUE,
choices = c(1, 2, 3, 4, 5, 6, 7, 8)),
bookmarkButton())
)))
}
server <- function(input, output, session) {
onRestored(function(state) {
updateSelectInput(session, "vars", selected = state$input$vars)
})
output$text <- renderText({
paste0("<p>", input$vars, "</p>")
})
}
shinyApp(ui, server, enableBookmarking = "url")
(我还用 onRestore
测试了这个(没有尾随 d
),它也在那里工作。文档明确建议使用 onRestored
调用 update*
功能,所以我会在不知道确切原因的情况下使用它。)