Взаимодействие с параметрами selectize.js в Shiny - PullRequest
0 голосов
/ 09 декабря 2018

Допустим, у меня есть следующее блестящее приложение:

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, содержащий строку «привет».Документация selectize.js предполагает, что опция create может принимать либо логическое значение, либо функцию в качестве аргумента, поэтому я интуитивно догадывался, что написать что-то вроде

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

вместо create = TRUE будет работать,но это не так.

Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 10 декабря 2018

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)

  }
)
...