嵌套callModules的闪亮名称空间问题

问题描述

我正在寻找一个简单的模块化设计的Shiny应用程序的帮助。我认为问题是名称空间问题,因此下面的示例被设置为我实际项目的简化版本。我的感觉是我没有将output$uis设置为正确的名称空间,但是我迷失了如何映射到它。

该应用会生成select_formUI的3个实例,并且应该是与callModules的{​​{1}}的服务器返回值的3个实例相关的命名空间。 select_form中的值会以小标题的形式传递出去。内部模块将所有3个小标题绑定为一个反应性小标题select_form

在我取消注释all_gen_forms_rctv中的input_slt_type_db列并返回pass_back_test之前,该过程正常进行。我正在寻找帮助,请在输出包括此列,并查看input$slt_type_db通过all_gen_forms_rctv用户选择的更改。

output$outpt_test

解决方法

问题在于select_form模块的UI函数不知道在另一个模块中正在调用它。因此,您需要通过将ID包裹在session$ns中来告知它。 callModule函数可以自行处理,因此这里无需更改任何内容。 inner_module 函数看起来像这样

inner_module <- function(input,output,session) {
  
  rctval_ui <- reactiveValues(all_ui=NULL)
  gen_forms <- reactiveValues()
  
  all_gen_forms_rctv <- reactive({
    browser()
    dplyr::bind_rows(lapply(reactiveValuesToList(gen_forms),function(current_module_output) {
      current_module_output$pass_back_test()
    }))
  })
  
  observeEvent(input$btn_start,{
    
    for(i in 1:3){
      x_id = glue("mod_{i}")
      rctval_ui$all_ui[[x_id]] <- select_formUI(session$ns(x_id))
      gen_forms[[x_id]] <- callModule(select_form,x_id)
    }
  })
  
  output$outpt_forms_ui <- renderUI({
    ns <- session$ns
    tagList(
      actionButton(ns('btn_start'),label = 'start'),verbatimTextOutput(ns('outpt_test')),hr(),uiOutput(ns('uis'))
    )
  })
  
  output$uis <- renderUI({
    ns <- session$ns
    tags$div(id = environment(ns)[['namespace']],tagList(rctval_ui$all_ui))
  })
  
  output$outpt_test <- renderPrint({all_gen_forms_rctv()})
  
}