我希望能够使用shinyjs 显示和隐藏打开/关闭我的UI 的各个部分。我需要从模块内访问模块外的部分 UI 。这可能吗?
请参阅随附的应用程序代码。主服务器代码中的显示/隐藏按钮有效,但模块中的按钮无效。
感谢您的任何建议。
exampleUI <- function(id) {
ns <- NS(id)
tagList(actionButton(ns("hide_id"), "Module - Hide divs"),
actionButton(ns("show_id"), "Module - Show divs"),
uiOutput(ns("plot_id")))
}
shinyUI(fluidPage(
shinyjs::useShinyjs(),
shinyjs::hidden(tags$div(id = "hidden", "hidden")),
tags$div(id = "shown", "shown"),
actionButton("hide_id", "Hide divs"),
actionButton("show_id", "Show divs"),
exampleUI("eg")))
example <- function(input, output, session)
{
ns <- session$ns
observeEvent(input$hide_id,
{
shinyjs::hide("hidden")
shinyjs::hide("shown")
})
observeEvent(input$show_id,
{
shinyjs::show("hidden")
shinyjs::show("shown")
})
}
shinyServer(function(input, output) {
callModule(example, "eg")
observeEvent(input$hide_id,
{
shinyjs::hide("hidden")
shinyjs::hide("shown")
})
observeEvent(input$show_id,
{
shinyjs::show("hidden")
shinyjs::show("shown")
})
})
Run Code Online (Sandbox Code Playgroud)
在v1.1 版本(2020 年 1 月) 发布之前,这是不可能的。asis在该版本中引入了参数。我引用:
当 时
asis=TRUE,ID 在模块内部时不会被命名。
以下是提问者代码的改编代表,显示了它的工作原理:
library(shiny)
library(shinyjs)
exampleUI <- function(id) {
ns <- NS(id)
tagList(actionButton(ns("hide_id"), "Module - Hide divs"),
actionButton(ns("show_id"), "Module - Show divs"),
uiOutput(ns("plot_id")))
}
example <- function(input, output, session)
{
ns <- session$ns
observeEvent(input$hide_id, {
shinyjs::hide("hidden", asis = TRUE)
shinyjs::hide("shown", asis = TRUE)
shinyjs::hide("plot_id")
})
observeEvent(input$show_id, {
shinyjs::show("hidden", asis = TRUE)
shinyjs::show("shown", asis = TRUE)
shinyjs::show("plot_id")
})
output$plot_id <- renderUI({
"This is the module calling ..."
})
}
UI <- function() {
fluidPage(
shinyjs::useShinyjs(),
shinyjs::hidden(tags$div(id = "hidden", "hidden")),
tags$div(id = "shown", "shown"),
actionButton("hide_id", "Hide divs"),
actionButton("show_id", "Show divs"),
exampleUI("eg"))
}
server <- function(input, output, session) {
callModule(example, "eg")
observeEvent(input$hide_id, {
shinyjs::hide("hidden")
shinyjs::hide("shown")
})
observeEvent(input$show_id, {
shinyjs::show("hidden")
shinyjs::show("shown")
})
}
shinyApp(UI, server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |