规范的方法来创建闪亮的可折叠列

时间:2017-02-20 16:13:55

标签: r twitter-bootstrap shiny flexbox

我想以一种直观的方式在R Shiny中实现可折叠列,并在ui.R中留下尽可能多的非交互式UI代码。

我已经找到了几种制作可折叠列的方法。一种是将整个UI放入renderUIserver.R的调用中,并根据输入条件呈现不同的布局,如下所示:

shinyApp(
    ui = fluidPage(
        uiOutput("panels"),
        checkboxInput("showSidePanel", "Show Side Panel", TRUE)
    ), 
    server = function(input, output) {
        output$panels <- renderUI(
            if (input$showSidePanel) {
                fluidRow(
                    column(4,
                           wellPanel(h2("Side Panel"))
                    ),
                    column(8,
                           wellPanel(h2("Main Panel"))
                    )
                )
            }
            else
                wellPanel(h2("Main Panel")))
    }
)

但是,这不可扩展(想象添加几个可选面板),并且代码的结构不反映其功能。此外,将整个用户界面置于单个renderUI来电中是不直观且难看的,而ui.R几乎是空的。

另一个选择是使用远离bootstrap并使用fillRow()

shinyApp(
    ui = fluidPage(
        fillRow(flex = c(NA, 1), height = 100,
                uiOutput("sidePanel"),
                wellPanel(h2("Main Panel"))
        ),
        checkboxInput("showSidePanel", "Show Side Panel", TRUE)
    ), 
    server = function(input, output) {
        output$sidePanel <- renderUI(
            if (input$showSidePanel) {
                wellPanel(h2("Side Panel"))
            } else {
                NULL
            }
        )
    }
)

这是可扩展的,虽然UI仍然完全驻留在服务器代码中,但至少它在逻辑上是分开的。然而,将一堆非交互式UI放入我的服务器代码只是为了使其可折叠仍然是违反直觉的[我的实际侧面板由许多UI元素组成]。有没有一种简单或合乎逻辑的方法可以解决这个问题?如果可能的话,我希望坚持使用fluidPage / fluidRow / column方法。

0 个答案:

没有答案