我希望能够使用 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")
})
})
最佳答案
这在 release v1.1 (January, 2020) 之前是不可能的出来。随着该版本的发布,参数 asis
被介绍了。我引用:
When
asis=TRUE
, the ID will not be namespaced when inside a module.
这是询问者代码的改编代表,显示了它是如何工作的:
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)
关于module - R shinyjs 显示/隐藏在模块中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45560947/