首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R shinyjs显示/隐藏模块不工作

R shinyjs显示/隐藏模块不工作
EN

Stack Overflow用户
提问于 2017-08-08 06:36:07
回答 1查看 2.8K关注 0票数 5

我希望能够使用shinyjs显示和隐藏来切换UI的各个部分。我需要从模块内部访问模块外部的UI部分。这个是可能的吗?

请参阅附加的应用程序代码。主服务器代码中的“显示/隐藏”按钮可以工作,但模块中的按钮不能工作。

谢谢你的建议。

代码语言:javascript
复制
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")
        })
    })
EN

回答 1

Stack Overflow用户

发布于 2021-01-31 15:10:06

第1.1版(2020年1月)出来之前,这是不可能的。在该版本中引入了参数asis。我引述如下:

asis=TRUE时,当在模块内时,ID将不会被命名空间。

下面是经过修改的asker代码的reprex,展示了它是如何工作的:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45560947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档