与Shiny中的selectize.js选项进行交互

时间:2018-12-09 17:01:07

标签: r shiny selectize.js

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

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)。

如果用户键入内容,它将显示以下内容: enter image description here

我想这样,当用户单击“添加c ...”时,该应用会将文件保存在名为c.txt的应用程序目录中,其中包含字符串“ hello”。 selectize.js的文档建议create选项可以使用布尔值或函数作为参数,因此,我凭直觉猜测是写类似

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

代替create = TRUE可以,但是不能。

有人可以帮我吗?

1 个答案:

答案 0 :(得分: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)

  }
)