我正在尝试根据用户希望如何提供输入来生成动态的 UI 元素。为了简单起见,我使用闪亮的仪表板,但我遇到了侧边栏菜单的问题。以前,当我将静态 UI 元素直接放入 sidebarMenu 中时,没有任何问题,但是当尝试将动态 UI 元素放入 sidebarMenu 中时,我遇到了问题。我正在使用 R 3.3.2 和 Shiny 1.0.0 以及仪表板 0.5.3。
我遇到的具体问题是,当程序首次加载时,动态 UI 元素不会加载。代码中似乎没有任何阻碍,因为即使卸载动态 UI,界面的所有功能也可以正常工作。我可以通过选择导航栏中的选项卡之一或将鼠标悬停在我已实现工具提示的内容上来加载动态 UI。
我无法提供确切的代码,但我重新创建了一个更小的可重现示例,该示例与我的较大版本具有相同的问题。
library("shiny")
library("shinydashboard")
header = dashboardHeader(
title = "Dynamic UI Example"
)
sidebar = dashboardSidebar(
sidebarMenu(
menuItemOutput("dynamic_sidebar")
)
)
body = dashboardBody(
tabBox(
tabPanel(
strong("One")
),
tabPanel(
strong("Two")
)
)
)
ui = dashboardPage(header, sidebar, body)
server = shinyServer(function(input,output,session){
output$dynamic_sidebar = renderMenu({
sidebarMenu(
menuItem(
"Slider or numeric problem",
radioButtons("slider_or_numeric",
label = "Slider or Numeric Input",
choices = c("Slider", "Numeric"),
selected = "Slider",
inline = TRUE
),
uiOutput("input")
)
)
})
output$input = renderUI({
if (input$slider_or_numeric == "Slider"){
sliderInput("slider",
label = "slider",
min = 0, max = 1,
value = 0
)
} else {
numericInput("numeric",
label = "numeric",
min = 0, max = 1,
value = 0
)
}
})
})
shinyApp(ui, server)
要验证问题,加载后只需打开菜单项,您将看到单选按钮,但看不到其他任何内容。将导航栏上的选项卡从一个切换到两个,输入内容应出现在菜单中(必须在菜单打开时完成)。
我真的只是在这里抓住救命稻草,我已经解决这个问题几个小时了,我认为这只是与这些功能的不兼容。我真的希望有人能证明我错了,并告诉我我只是做错了。我已经找到了我的主程序的替代方案,但它们与我在这里想要完成的任务没有相同的美感。
感谢您的任何帮助!