SelectizeInput 不显示 shiny.io 上的所有选项
SelectizeInput does not display all choices on shiny.io
我有一个闪亮的应用程序,它有一个 selectizeInput
小部件,它以反应数据的形式从远程数据库中获取大约 26000 个选择。
使用远程数据库和反应性是为了避免加载选项时出现滞后和缓慢。
问题是,当在本地桌面上启动时,它工作正常,但当上传到 shinyapps.io 时,小部件不会向用户呈现所有可用的选择。
我把widgets的属性都玩过没用,比如设置SERVER =TRUE
等等。
我已经将我正在使用的代码以及 link 放在我想要加载到 selectizeInput
的数据中作为选择。
UI部分
library(shiny)
library(DBI)
library(RMySQL)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
skin="yellow",
dashboardHeader( ),
#sidebar content
dashboardSidebar(
sidebarMenu(
selectInput(
inputId="selectData",
label=" ", selected = NULL,
choices=c( "title" )),
menuItem("Titles Search", tabName = "Titles", icon = icon("font"))
)
),
dashboardBody(
tags$head(
tags$style(HTML("
.content-wrapper {
background-color: green !important;
}
.main-header {
background-color: red !important;
}
"))
),
tabItems(
tabItem(tabName = "Titles",
fluidRow(
column(width=3,
box(
title=" ",
solidHeader=TRUE,
collapsible=TRUE,
width=NULL,
selectizeInput('titles', label = "Search by title",
choices = NULL, options = list(
placeholder = 'Type the title', maxOptions = 1000,
maxItems = 100,multiple = F, searchConjunction = 'and')),
tags$style(type="text/css",
".selectize-
input::after{visibility:hidden;};"
)
)
)
)
)
)
)
)
服务器部分
library(shiny)
library(DBI)
library(RMySQL)
library(shinydashboard)
library(shinyjs)
shinyServer(function(input, output, session) {
con <- dbConnect(MySQL(), user='XXXX',
port = 3306, password='XXXXX',
dbname='XXXXXX',
host='XXXXXXXX' )
query <- function(...) dbGetQuery(con, ...)
on.exit(dbDisconnect(con), add = TRUE)
selectedData <- reactiveValues()
observeEvent(input$selectData, {
con <- dbConnect(MySQL(), user='XXXXXX', port = 3306, password='XXXX', dbname='XXXXX', host='XXXXXXX' )
query <- function(...) dbGetQuery(con, ...)
on.exit(dbDisconnect(con), add = TRUE)
if (input$selectData == "title") {
selectedData$titledata <- query("SELECT titles FROM titles ;")
}
updateSelectizeInput(session, "titles",
choices = as.character(unique(selectedData$titledata$titles)),
server = TRUE)
})
session$onSessionEnded(function() { dbDisconnect(con) })
})
我做错了什么?是 shinyapps.io 问题还是编码问题?
您似乎遇到了 selectize 将加载的项目数的限制。您似乎加载了大约 1000 件商品。
如果您查看 selectize 文档 here,有一个选项 maxOptions
默认为 1000。您甚至可以在 UI 中将此值设置为 1000。您的默认数据集包含 25k+ 个选项。
- 尝试将此数字提高到 30k。
- 也尝试将此选项添加到您的服务器中的
updateSelectizeInput
。
我有一个闪亮的应用程序,它有一个 selectizeInput
小部件,它以反应数据的形式从远程数据库中获取大约 26000 个选择。
使用远程数据库和反应性是为了避免加载选项时出现滞后和缓慢。
问题是,当在本地桌面上启动时,它工作正常,但当上传到 shinyapps.io 时,小部件不会向用户呈现所有可用的选择。
我把widgets的属性都玩过没用,比如设置SERVER =TRUE
等等。
我已经将我正在使用的代码以及 link 放在我想要加载到 selectizeInput
的数据中作为选择。
UI部分
library(shiny)
library(DBI)
library(RMySQL)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
skin="yellow",
dashboardHeader( ),
#sidebar content
dashboardSidebar(
sidebarMenu(
selectInput(
inputId="selectData",
label=" ", selected = NULL,
choices=c( "title" )),
menuItem("Titles Search", tabName = "Titles", icon = icon("font"))
)
),
dashboardBody(
tags$head(
tags$style(HTML("
.content-wrapper {
background-color: green !important;
}
.main-header {
background-color: red !important;
}
"))
),
tabItems(
tabItem(tabName = "Titles",
fluidRow(
column(width=3,
box(
title=" ",
solidHeader=TRUE,
collapsible=TRUE,
width=NULL,
selectizeInput('titles', label = "Search by title",
choices = NULL, options = list(
placeholder = 'Type the title', maxOptions = 1000,
maxItems = 100,multiple = F, searchConjunction = 'and')),
tags$style(type="text/css",
".selectize-
input::after{visibility:hidden;};"
)
)
)
)
)
)
)
)
服务器部分
library(shiny)
library(DBI)
library(RMySQL)
library(shinydashboard)
library(shinyjs)
shinyServer(function(input, output, session) {
con <- dbConnect(MySQL(), user='XXXX',
port = 3306, password='XXXXX',
dbname='XXXXXX',
host='XXXXXXXX' )
query <- function(...) dbGetQuery(con, ...)
on.exit(dbDisconnect(con), add = TRUE)
selectedData <- reactiveValues()
observeEvent(input$selectData, {
con <- dbConnect(MySQL(), user='XXXXXX', port = 3306, password='XXXX', dbname='XXXXX', host='XXXXXXX' )
query <- function(...) dbGetQuery(con, ...)
on.exit(dbDisconnect(con), add = TRUE)
if (input$selectData == "title") {
selectedData$titledata <- query("SELECT titles FROM titles ;")
}
updateSelectizeInput(session, "titles",
choices = as.character(unique(selectedData$titledata$titles)),
server = TRUE)
})
session$onSessionEnded(function() { dbDisconnect(con) })
})
我做错了什么?是 shinyapps.io 问题还是编码问题?
您似乎遇到了 selectize 将加载的项目数的限制。您似乎加载了大约 1000 件商品。
如果您查看 selectize 文档 here,有一个选项 maxOptions
默认为 1000。您甚至可以在 UI 中将此值设置为 1000。您的默认数据集包含 25k+ 个选项。
- 尝试将此数字提高到 30k。
- 也尝试将此选项添加到您的服务器中的
updateSelectizeInput
。