闪亮 - textInput
Posted
技术标签:
【中文标题】闪亮 - textInput【英文标题】:Shiny - textInput 【发布时间】:2016-09-22 15:49:42 【问题描述】:在使用类似于闪亮选择输入选项的闪亮文本输入时,有什么方法可以提供可用选项?
也就是说,如果用户键入一个字母或字符,则必须提供该字母或字符内的所有可用选项。由于我有很多选择,因此 selectinput 会变慢,而不是输入的好选择。因此,我选择 textInput。
任何建议都会有所帮助!
谢谢
【问题讨论】:
可能 selectize 是你需要的:shiny.rstudio.com/articles/selectize.html question 的答案可能对您有所帮助 澄清一些混淆:默认情况下,selectInput() 和 selectizeInput() 使用 javascript 库 selectize.js。除非您使用selectize=FALSE
在 selectInput() 上专门选择基本输入。所以每个人都在谈论selectize
的不同模式。见gallery和reference
【参考方案1】:
您可以将 selectInput 与参数 multiple = TRUE 一起使用
selectInput(inputId, label, choices, multiple = TRUE)
这将输出一个文本框而不是下拉菜单,并且当用户开始输入字母中的所有可用选项时,将被过滤掉。
Create a select list input control
Example
【讨论】:
【参考方案2】:使用 DT,您可以做一些花哨的事情。以下是一个示例,其中表格列出了包含您键入的文本的所有选项。如果单击表格单元格,则文本输入将使用表格单元格的文本进行更新。您也可以使用表格的搜索字段。
library(shiny)
shinyApp(
ui = fluidPage(textInput("text", "Please input text:"),
DT::dataTableOutput('tbl')),
server = function(session, input, output)
# all your choices for the textfield go into "text" column
allData <- data.frame(ID = '', text = c(paste0("Text",1:50)))
# table with only the texts that contain input$text
output$tbl = DT::renderDataTable(
allData[grep(input$text, allData$text), ],
selection = 'none',
rownames = FALSE,
options = list(searchHighlight=T)
)
# fill textInput after Click in Table
observeEvent(input$tbl_cell_clicked,
info <- input$tbl_cell_clicked
if (is.null(info$value) || info$col != 1) return()
else
updateTextInput(session, "text", value = info$value)
)
)
【讨论】:
【参考方案3】:selectinput 有点慢,不是输入的好选择
selectInput
多选是这种情况下的最佳选择。通过将selectInput
移动到服务器可以轻松管理缓慢的加载。
只需输入ui.R
:
selectizeInput(inputId=..., label=..., choices = NULL, multiple = TRUE)
在server.R
:
server <- function(input, output, session)
updateSelectizeInput(session = session,inputId =...,choices=..., server = TRUE)
现在您应该没有任何加载缓慢的问题。
【讨论】:
以上是关于闪亮 - textInput的主要内容,如果未能解决你的问题,请参考以下文章