假设我有以下闪亮的应用程序:
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)。
我想这样,当用户单击“添加c ...”时,该应用会将文件保存在名为c.txt
的应用程序目录中,其中包含字符串“ hello”。 selectize.js
的文档建议create
选项可以使用布尔值或函数作为参数,因此,我凭直觉猜测是写类似
create = function(input){write("hello", paste0(input, ".txt"))}
代替create = TRUE
可以,但是不能。
有人可以帮我吗?
答案 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)
}
)