Включение (отключение) selectInput для определенной tabPanel в tabBox

У меня есть такая сборка приложения shinydashboard: у меня есть tabItem, где у меня есть поле (с моим selectInput) и tabBox. В поле у ​​меня есть разные фильтры, а в tabBox - две tabPanel (tab1 и tab2). Я хочу отключить selectInput (только один) для tab1 и включить его для tab2. Я пытаюсь сделать это с помощью пакета shinyJS, но у меня возникли некоторые трудности.

library(shiny)
library(shinydashboard)
library(shinyjs)

df <- data.frame(id = 1:10, name = paste(letters[1:10], sep = ""))
body <- dashboardBody(
  shinyjs::useShinyjs(),
  fluidRow(
    tabBox(
      title = "First tabBox",
      # The id lets us use input$tabset1 on the server to find the current tab
      id = "tabset", height = "250px",
      tabPanel("tab1", "First tab content"),
      tabPanel("tab2", "Tab content 2")
    ),
    box(title = "Variables filter",
        id = "filter_box",
        br(),
        background = "light-blue",
        solidHeader = TRUE,
        width = 2,
        selectInput("filter_id", "Choose id", multiple = T, choices = c("All", as.character(unique(df$id)))))
  )
)

shinyApp(
  ui = dashboardPage(
    dashboardHeader(title = "tabBoxes"),
    dashboardSidebar(),
    body
  ),
  server = function(input, output) {
    observe({
      validate(need(!is.null(input$tab1), ""))
      if (input$tab1 == 1) {
        disable("filter_id")
      } else {
        enable("filter_id")
      }
    })
  }
)

Спасибо


person Mostafa    schedule 02.10.2017    source источник
comment
Вы пробовали использовать conditionalPanel, чтобы вместо этого просто скрыть элемент пользовательского интерфейса?   -  person Michael Bird    schedule 02.10.2017
comment
Пожалуйста, проверьте мое обновление   -  person Mostafa    schedule 04.10.2017


Ответы (1)


Я изменил свой ответ. Следующий код теперь должен работать. Вы должны добавить значение к каждой tabPanel, к которому вы можете обратиться позже. См. Также здесь: https://www.rdocumentation.org/packages/shinydashboard/versions/0.6.1/topics/tabBox

library(shiny)
library(shinydashboard)
library(shinyjs)

df <- data.frame(id = 1:10, name = paste(letters[1:10], sep = ""))
body <- dashboardBody(
  shinyjs::useShinyjs(),
  fluidRow(
    tabBox(
      title = "First tabBox",
      # The id lets us use input$tabset1 on the server to find the current tab
      id = "tabset", height = "250px",
      tabPanel("tab1", value=1,"First tab content"),
      tabPanel("tab2", value=2,"Tab content 2")
    ),
    box(title = "Variables filter",
        id = "filter_box",
        br(),
        background = "light-blue",
        solidHeader = TRUE,
        width = 2,
        selectInput("filter_id", "Choose id", multiple = T, choices = c("All", as.character(unique(df$id)))))
  )
)

shinyApp(
  ui = dashboardPage(
    dashboardHeader(title = "tabBoxes"),
    dashboardSidebar(),
    body
  ),
  server = function(input, output) {
    observe({
      validate(need(!is.null(input$tabset), ""))
      if (input$tabset == 1) {
        disable("filter_id")
      } else {
        enable("filter_id")
      }
    })
  }
)
person thmschk    schedule 02.10.2017
comment
Спасибо за ваш ответ, он работает на блестящем, но в моем случае ничего не произошло. Я решил проблему с предупреждением с помощью shinybs, но это не лучшее решение - person Mostafa; 04.10.2017
comment
Не могли бы вы привести нам полный пример, было бы полезно присмотреться к нему поближе. Спасибо - person thmschk; 05.10.2017
comment
Огромное спасибо ! (Я не заметил ценности в вашем первом примере) - person Mostafa; 15.10.2017