module - R shinyjs 显示/隐藏在模块中不起作用

标签 module shinyjs

我希望能够使用 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/

相关文章:

boost - 安装 boost 日志

module - Ocaml破坏性替换错误

javascript - Shiny :使用shinyjs禁用tabPanel()

javascript - 我无法访问类中的方法

Python代码组织帮助: importing functions

r - 你能用 shinyjs 来隐藏/显示整个面板吗?

r - 仅在 Shiny 应用不忙时激活 actionButton

javascript - R/Shiny 中的可拖动折线图

java - 如何在 Java 代码中使用 Parcelable

r - Shiny:ggplot 的动态颜色(填充)输入