首页 文章

与Shiny中的selectize.js选项交互

提问于
浏览
0

假设我有以下闪亮的应用:

library(shiny)

shinyApp(
  ui=fluidPage(
    selectizeInput(
      inputId = "foo",
      label   = NULL,
      choices = c("a", "b"),
      options = list(
        create = TRUE
      )
    )
  ),
  server=function(input, output, session){

  }
)

这是一个非常简单的应用程序,其中我有一个使用 selectize.js 生成的下拉列表 . create 选项将允许用户输入自定义选择作为输入(不同于a或b) .

如果用户输入内容,则会显示以下内容:

我想,当用户点击"Add c..."时,应用程序会将文件保存在名为 c.txt 的应用程序库中,其中包含字符串"hello" . selectize.js 的文档建议 create 选项可以使用布尔值或函数作为其参数,所以我直觉地猜测写一些像

create = function(input){write("hello", paste0(input, ".txt"))}

而不是 create = TRUE 会起作用,但事实并非如此 .

有人可以帮我这个吗?

1 回答

  • 0

    selectize.js 让你添加JS函数而不是R函数 .

    但使用R你可以达到同样的目的:

    library(shiny)
    
    shinyApp(
    
      ui = fluidPage(
        selectizeInput(
          inputId = "foo",
          label   = NULL,
          choices = c("a", "b"),
          options = list(create = TRUE)
        )
      ),
    
      server = function(input, output, session) {
    
        writeSelectizeTxt <- function(selectedChoices) {
          for (selection in selectedChoices) {
            fileName <- paste0(selection, ".txt")
            if (!file.exists(fileName)) {
              write("hello", fileName)
              cat("Wrote file: ", file.path(getwd(), fileName))
            }
          }
        }
    
        observeEvent(input$foo, {
          req(input$foo)
          writeSelectizeTxt(input$foo)
        }, ignoreNULL = TRUE,
        ignoreInit = FALSE)
    
      }
    )
    

相关问题