首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R闪亮- uiOutput没有在menuItem中呈现

R闪亮- uiOutput没有在menuItem中呈现
EN

Stack Overflow用户
提问于 2016-04-14 02:51:51
回答 1查看 1.9K关注 0票数 3

问题

为什么在server上生成并在带有uiOutput()ui上呈现的server没有在menuItem()中显示

示例

在这个简单的应用程序中,我在server上生成一个server(注意,menuItem是故意注释掉的),它的工作原理与预期一样。

代码语言:javascript
复制
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( )中时,输出将不再呈现:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 06:48:22

首先,我会将uiOutput("sli_val1")转换为uiOutput("out_sli_val1"),以防止重复的Ids。

关于您的问题:当闪亮在文档中运行并呈现/绑定所有可能的输出时,这是一件很奇怪的事情。默认操作是忽略所有隐藏的输出元素--这意味着不完全忽略(输出"sli_val1“是正常的),但是它们的函数被挂起,不允许呈现任何子元素。

所以问题是,在启动时,这个输出隐藏在子项树中,然后被忽略。

修复可以通过调用取消这种约束行为来完成。

代码语言:javascript
复制
outputOptions(output, "out_sli_val1", suspendWhenHidden = FALSE)

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

下面是您使用2行额外代码(以及修改后的输出Id)进行的最小修正:

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

https://stackoverflow.com/questions/36613018

复制
相关文章

相似问题

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