Как удалить остатки при скрытии панели вкладок в блестящем

Я хотел бы скрыть / показать панель вкладок при определенных условиях. При выборе «источник 2» я хотел бы скрыть вкладку 2, но в коде, который я использовал, есть ошибка. Если я сначала выбрал «источник 1», а затем щелкнул «вкладку 2» и изменил источник данных на «источник 2», панель вкладок «tab2» действительно скрылась, но содержимое «tab2» перекрыло содержимое «tab1». Как я могу убрать резудацию скрытой вкладки? Любые мысли будут высоко оценены.

library(shiny)
library(shinyjs)

runApp(list(
  ui = fluidPage(
    useShinyjs(),
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"),
    tabsetPanel(
      id = "navbar",
      tabPanel(title = "tab1",
               value = "tab1",
               h1("Tab 1")
      ),
      tabPanel(id="id2", title = "tab2",
               value = "tab2",
               h1("Tab 2")
      )
    )
  ),
  server = function(input, output) {
    observeEvent(input$dataSource,{
      toggle(condition = (input$dataSource !='source 2'), selector = "#navbar li a[data-value=tab2]")
    })
  }
))

[ошибка выглядит так] [1] [1]: http://i.stack.imgur.com/eOHLS.png


person lin1212    schedule 26.04.2016    source источник
comment
Каким-то образом ваш код корректно работает на моем компьютере без ошибок.   -  person Xiongbing Jin    schedule 26.04.2016


Ответы (1)


Я мог воспроизвести ошибку на своем ноутбуке.

Я бы посоветовал использовать функцию renderUI для динамического создания tabsetPanel.

library(shiny)
# library(shinyjs)

runApp(list(
  ui = fluidPage(
    #useShinyjs(),
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"),
    uiOutput("dynamic")

  ),
  server = function(input, output) {

    output$dynamic <- renderUI({

      if (input$dataSource == "source 1") { 

        tabsetPanel(
          id = "navbar",
          tabPanel(title = "tab1",
                   value = "tab1",
                   h1("Tab 1")
          ),
          tabPanel(id="id2", title = "tab2",
                   value = "tab2",
                   h1("Tab 2")
          )
        )
      } else {
        tabsetPanel(
          id = "navbar",
          tabPanel(title = "tab1",
                   value = "tab1",
                   h1("Tab 1")
          )
        )
      }
    })
  }
))
person Michal Majka    schedule 26.04.2016