难以在嵌套的Shiny模块中使actionButton正常工作

时间:2019-05-21 11:22:48

标签: r shiny shinymodules

在下面的模块化闪亮应用程序中,insertBtn_outer按钮可以正常工作,但是我正在努力使insertBtn_inner按钮正常工作。非常感谢您提供有助于解决我的问题的见解。

library(shiny)

innerUI <- function(id){
  ns <- NS(id)
  actionButton(ns('insertBtn_inner'), 'Insert')
}

inner <- function(input,output,session){
  observeEvent(input$insertBtn_inner, {
    showModal(modalDialog(
      title = 'Debug message',
      paste0('The inner button works'),
      easyClose = TRUE,
      footer = NULL
    ))})
}

outerUI <- function(id){
  ns <- NS(id)
  tagList(
    actionButton(ns('insertBtn_outer'), 'Insert'),
    br(),
    tabsetPanel(id=ns('tabset'), type = 'tabs',
                innerUI('inner1')))
}

outer <- function(input,output,session){
  callModule(inner,'inner1')
  observeEvent(input$insertBtn_outer, {
    showModal(modalDialog(
      title = 'Debug message',
      paste0('The outer button works'),
      easyClose = TRUE,
      footer = NULL))})
}  


ui <- shiny::navbarPage('test_app',
                        shiny::tabPanel('Tab Panel',
                                        outerUI('test')))

server <- function(input, output) {
  callModule(outer,'test')
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

tabsetPanel内,您必须使用一个或多个tabPanel。另外,您必须用innerUI来调用ns,即innerUI(ns('inner1'))

outerUI <- function(id){
  ns <- NS(id)
  tagList(
    actionButton(ns('insertBtn_outer'), 'Insert'),
    br(),
    tabsetPanel(tabPanel("XXX", innerUI(ns('inner1'))), 
                id=ns('tabset'), type = 'tabs')
  )
}