updateTabsetPanel с модулем Shiny - PullRequest
       1

updateTabsetPanel с модулем Shiny

0 голосов
/ 18 февраля 2019

Возникают проблемы с вызовом updateTabsetPanel в модуле Shiny, отлично работает без.

library(shiny)

mod_ui <- function(id){
  ns <- NS(id)
  tagList(
    actionButton(ns("back"), "back")
  )
}

mod <- function(input, output, session){
  observeEvent(input$back, {
    print("Button click, go back to home tab")
    updateTabsetPanel(session = session, inputId = "tabs", selected = "home")
  })
}

ui <- navbarPage(
  "example",
  id = "tabs",
  tabPanel(
    "home",
    h4("updateTabsetPanel does not work with modules"),
    h5("But the button below does"),
    actionButton("switch", "switch")
  ),
  tabPanel(
    "secondtab",
    mod_ui("second")
  )
)

server <- function(input, output, session){
  callModule(mod, "second")
  observeEvent(input$switch, {
    updateTabsetPanel(session = session, inputId = "tabs", selected = "secondtab")
  })
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 18 февраля 2019

Модули спроектированы таким образом, что каждый модуль абсолютно автономен.Если вам нужно связаться с родителем, который вызвал модуль, параметры должны быть переданы явно.Вот как это делается:

library(shiny)

mod_ui <- function(id){
  ns <- NS(id)
  tagList(
    actionButton(ns("back"), "back")
  )
}

mod <- function(input, output, session,parent_session){
  observeEvent(input$back, {
    print("Button click, go back to home tab")
    updateTabsetPanel(session = parent_session, inputId = "tabs", selected = "home")
  })
}

ui <- navbarPage(
  "example",
  id = "tabs",
  tabPanel(
    "home",
    h4("updateTabsetPanel does not work with modules"),
    h5("But the button below does"),
    actionButton("switch", "switch")
  ),
  tabPanel(
    "secondtab",
    mod_ui("second")
  )
)

server <- function(input, output, session){
  callModule(mod, "second",parent_session = session)
  observeEvent(input$switch, {
    updateTabsetPanel(session = session, inputId = "tabs", selected = "secondtab")
  })
}

shinyApp(ui, server)

Родитель session явно передается в модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...