Подтвердить что ты не робот

Являются ли вкладки с их собственными боковыми панелями и mainPanels возможными в блеске?

Я хотел бы отображать разные входы для разных вкладок. Поэтому я попытался создать страницу с несколькими вкладками. Тем не менее, я не могу использовать sth, как показано ниже:

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("Header"),

  tabsetPanel(
    tabPanel(
      headerPanel("Tab 1"),
      sidebarPanel(
        selectInput("var", "Parametre", choices = c("1", "2", "3"))
        ),
      mainPanel(
        textOutput("text1")
        )
      ),
    tabPanel(
      headerPanel("Tab 2"),
      sidebarPanel(
        selectInput("var", "Parametre", choices = c("21", "22", "23"))
      ),
      mainPanel(
        textOutput("text2")
      )
    )
    )
  ))

Я подозреваю, что проблема с pageWithSidebar вызывает проблему, но я не смог найти альтернативу в группах google. Есть ли способ отобразить несколько вкладок с их собственными боковыми панелями и mainPanels, или я должен создать для этого различные приложения?

4b9b3361

Ответ 1

Если я не неправильно понимаю ваш вопрос, я думаю, вы даже можете уклониться от части jQuery (из ответа @f1r3br4nd), предоставив идентификатор для функции tabsetPanel, здесь id = "conditionedPanels". Параметр value (т.е. Какая вкладка выбрана на главной панели) затем доступен через переменную input.

Пример minmal: server.R может быть пустым, кроме скелета функции shinyServer. Файл ui.R может быть следующим.

shinyUI(pageWithSidebar(
  headerPanel("Conditional Panels"),
  sidebarPanel(
    conditionalPanel(condition="input.conditionedPanels==1",
                     helpText("Content Panel 1")
    ),
    conditionalPanel(condition="input.conditionedPanels==2",
                     helpText("Content Panel 2")
    ) 
  ),
  mainPanel(
    tabsetPanel(
      tabPanel("Panel 1", value=1), 
      tabPanel("Panel 2", value=2)
      , id = "conditionedPanels"
    )
  )
))

Ответ 2

Я получил свою работу, имея только один sidebarPanel, как в примерах приложений Shiny, но затем обертывая материал в sidebarPanel, который предназначен только для определенных вкладок в отдельных вызовах conditionalPanel как . Трюк заключается в том, чтобы строка символов, которая является аргументом условия conditionalPanel, представляет собой оператор jQuery, который смотрит на атрибут html текущей выбранной вкладки и === на имя вкладки, для которой должно отображаться это содержимое на боковой панели:

conditionalPanel(
    "$('li.active a').first().html()==='Foo'",
    actionButton("bar","Bar"));

... где Foo - это название вкладки.

Короче говоря, одна боковая панель, но ее содержимое зависит от активной вкладки.