【问题标题】:r shiny - uiOutput not rendering inside menuItemr闪亮-uiOutput未在menuItem内呈现
【发布时间】:2016-08-05 09:53:20
【问题描述】:

问题

为什么在server 上生成并在ui 上使用uiOutput() 渲染的sliderInput() 不会显示在menuItem() 中?

示例

在这个简单的应用程序中,我在server 上生成了一个sliderInput(注意menuItem 被故意注释掉了),它按预期工作

library(shiny)
library(shinydashboard)

rm(ui, server)

ui <- dashboardPage(
    dashboardHeader(),

    dashboardSidebar(
        sidebarMenu(
            #menuItem(text = "data options",
                      checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
                                         choices = c("some","check","boxes","to","choose","from") ),
                       uiOutput("sli_val1"),
                       checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
                                          choices = c("another","set","of","check","boxes") ),
            #                ),
            menuItem(text = "another tab")
            )
    ),
    dashboardBody()
)

server <- function(input, output, session){

    withProgress(message = "loading page", value=0.1, {
        ## simulate loading some data
        Sys.sleep(3)

        ## slider input
        output$sli_val1 <- renderUI({
            sliderInput(inputId = "sli_val1", 
                        label = "values", min = 0, max = 100,
                        value = c(25, 75) )
        })
        setProgress(value=1, detail="Complete")
    })
}

shinyApp(ui = ui, server = server)

但是,当我将 uiOutput 移动到 menuItem( ) 内时,输出不再呈现:

ui <- dashboardPage(
    dashboardHeader(),

    dashboardSidebar(
        sidebarMenu(
            menuItem(text = "data options",
                     checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
                                        choices = c("some","check","boxes","to","choose","from") ),
                     uiOutput("sli_val1"),
                     checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
                                        choices = c("another","set","of","check","boxes") )
                             ),
            menuItem(text = "another tab")
            )
    ),
    dashboardBody()
)

【问题讨论】:

  • this 回答你的问题了吗?
  • @MikaelJumppanen - 不完全是:我没有使用menuSubItem( ),所以我无法定义tabName

标签: r shiny shinydashboard


【解决方案1】:

首先,我会将uiOutput("sli_val1") 更改为uiOutput("out_sli_val1"),以防止重复ID。

关于您的问题:当 Shiny 遍历文档并渲染/绑定所有可能的输出时,这是一件奇怪的事情。默认操作是忽略所有隐藏的输出元素 - 这意味着不完全忽略(输出“sli_val1”绑定好了),但它们的功能被暂停,不让子元素被渲染。

所以问题是,在启动时,此输出隐藏在子项树中,并从那里被忽略。

可以通过调用取消设置此暂停行为来完成修复

outputOptions(output, "out_sli_val1", suspendWhenHidden = FALSE)

但是如何以及在哪里?必须在运行“数据加载”之前设置此选项。但是如果output$out_sli_val1 没有分配任何东西(是NULL),它会抛出错误。为了避免这种情况,可以初始化一个空的 UI 块,它在“数据加载”时被覆盖。

这是你的最小修复,额外增加 2 行代码(和修改后的输出 ID):

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(
      menuItem(text = "data options", 
        checkboxGroupInput(inputId = "cbg_group1", label = "group 1", 
                           choices = c("some","check","boxes","to","choose","from") ),
        uiOutput("out_sli_val1"),
        checkboxGroupInput(inputId = "cbg_group2", label = "group 2", 
                           choices = c("another","set","of","check","boxes") )
      ),
      menuItem(text = "another tab")
    )
  ),
  dashboardBody()
)

server <- function(input, output, session){
  output$out_sli_val1 <- renderUI({})
  outputOptions(output, "out_sli_val1", suspendWhenHidden = FALSE)

  withProgress(message = "loading page", value=0.1, {
    ## simulate loading some data
    Sys.sleep(3)

    ## slider input
    output$out_sli_val1 <- renderUI({
      sliderInput(inputId = "sli_val1", label = "values", min = 0, max = 100, value = c(25, 75) )
    })

    setProgress(value=1, detail="Complete")
  })
}

shinyApp(ui = ui, server = server)

【讨论】:

  • 不错的答案!你是怎么调试的?
  • @MikaelJumppanen 我想我在某处读到过这个隐藏的问题。因此,我开始尝试手动取消绑定/绑定输出(costom 消息处理程序 + 操作按钮)并查看 HTML 是否输出 div 会做出反应。令人惊讶的是,它在 subMenu 可见时立即出现。我尝试将 unbind/bind 链接到这种可见性(会很潮),但发现这种方法更简单。空的 renderUI init 是一种预感。
  • 我不确定这是否是预期行为。
  • @MikaelJumppanen 我很确定这不是故意的。
  • @Symbolix 也许你可以写错误报告。 github.com/rstudio/shinydashboard/issues
猜你喜欢
  • 2013-03-06
  • 2021-05-05
  • 2015-08-03
  • 2013-10-01
  • 2017-06-04
  • 2020-10-17
  • 1970-01-01
  • 2018-07-01
  • 2016-03-14
相关资源
最近更新 更多