R Shiny navbarMenu

时间:2014-03-15 20:53:32

标签: r shiny

我正在使用该软件包的开发版本开发一个Shiny应用程序,如here所述。

当我将navbarPagetabsetPanel一起使用时,一切都按预期工作:

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标签内,但不知何故,它在页面源代码中显示为纯文本。

有没有人知道造成这种情况的原因,或者如何修复它?

1 个答案:

答案 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 选项卡)设置,带有自己的选项卡。

enter image description here

您可以尝试通过您链接到的shiny app layout guide上的其他示例来进行类比。因此,例如,在您的示例中,您将永远无法创建子菜单,只需将另一个tabPanel添加到tabPanel(tabPanel不能是tabPanel的容器,如上所示)。你首先需要说你想要一个navbarMenu,它实际上可以包含多个tabPanel。

这似乎很复杂,因为导航和页面密切相关,如果容器包含容器,它实际上变成了导航项。 RStudio团队为这些布局项目选择的条款有很好的提示,但并不总是很明显它是如何工作的。