问题:我是否可以在actionButton
代码中模拟点击server
?
背景:我有一个shiny
个应用,其中有一些用户应该输入的参数。应用的这一部分分为几个UI,每个人都使用renderUI
创建。开始时,用户只能看到第一个UI。一旦她填写了字段,她就应该点击actionButton
并动态生成第二个UI,其中第二个UI的字段和文本取决于第一个UI字段的内容。
一旦用户填写了两个UI,我希望她能够将所有字段的内容保存为模板,并在下次使用该应用程序时加载模板。实现保存只需将所有值以结构化方式写入csv
,然后使用update*
- 函数(例如updateNumericInput
,updateTextInput
等)完成加载。
问题在于我以某种方式模拟了actionButton
上的点击,因为在加载模板时,第二个UI还没有被创建。将模板上传按钮的依赖性添加到第二个UI没有任何帮助,因为第二个UI需要来自第一个UI的一些值。
答案 0 :(得分:1)
您可以使用简短的javascript函数来完成此操作,该函数只需调用click()
JS函数。这是一个简短的简单闪亮的应用程序,演示了如何做到这一点。
library(shiny)
library(shinyjs)
jscode <- "shinyjs.click = function(id) { $('#' + id).click(); }"
runApp(shinyApp(
ui = fluidPage(
useShinyjs(),
extendShinyjs(text = jscode),
actionButton("btn1", "When you click me, I print the time"),
actionButton("btn2", "When you click me, I'll click the other button")
),
server = function(input, output, session) {
observeEvent(input$btn1, {
print(Sys.time())
})
observeEvent(input$btn2, {
js$click("btn1")
})
}
))
请注意,我正在使用shinyjs包与JS easy
进行交互