我正在使用该软件包的开发版本开发一个Shiny应用程序,如here所述。
当我将navbarPage
与tabsetPanel
一起使用时,一切都按预期工作:
library(shiny)
shinyUI(
navbarPage("Page Title",
tabPanel("Panel 1")
tabPanel("Panel 2"),
tabPanel("Panel 3"))
)
但是当我向其中一个标签添加navbarMenu
时:
library(shiny)
shinyUI(
navbarPage("Page Title",
navbarMenu("Menu",
tabPanel("Panel 1.1"),
tabPanel("Panel 1.2")),
tabPanel("Panel 2"),
tabPanel("Panel 3"))
)
文字'标签窗格有效'显示在应用的每个标签页上,即使是不在navbarMenu
内的标签页。看起来像标签窗格有效'是一个CSS类,应该在div标签内,但不知何故,它在页面源代码中显示为纯文本。
有没有人知道造成这种情况的原因,或者如何修复它?
答案 0 :(得分:11)
我希望我能找到一个好的比喻,或者是一个更好的作家,用几句话来解释这一点。
但我从容器和内容的角度考虑它。在你的第一个例子中,你有一个"导航栏页面"。这是一个可以填充其他"页面的容器。例如tabPanels。
但tabPanels不能用tabPanels填充,只能使用R输出生成的图形或表格等内容。如果你想要一个包含多个tabPanel的页面,你需要一个能够包含它们的容器:tabsetPanel(字面意思是一组tabpanels)。
shinyUI(
navbarPage("Page Title",
tabPanel("Panel 1",
tabsetPanel("Panel 1.x",
tabPanel("Panel 1.1"),
tabPanel("Panel 1.2")
)),
tabPanel("Panel 2"),
tabPanel("Panel 3")
)
)
现在你会看到你有一个额外的"页面"由tabsetPanel(一个 set 选项卡)设置,带有自己的选项卡。
您可以尝试通过您链接到的shiny app layout guide上的其他示例来进行类比。因此,例如,在您的示例中,您将永远无法创建子菜单,只需将另一个tabPanel添加到tabPanel(tabPanel不能是tabPanel的容器,如上所示)。你首先需要说你想要一个navbarMenu,它实际上可以包含多个tabPanel。
这似乎很复杂,因为导航和页面密切相关,如果容器包含容器,它实际上变成了导航项。 RStudio团队为这些布局项目选择的条款有很好的提示,但并不总是很明显它是如何工作的。