创建的闪亮子模块服务器 ui 元素未出现在输入列表中

Shiny submodule server created ui elements do not appear on input list

我在我闪亮的应用程序中使用模块。但是,如果我嵌套我的模块,我无法让 ui 从在模块服务器部分中创建的 ui 元素发回信息。在 ui-section 中创建的 ui-elements 没有问题,只有在 server-section 中创建的元素才有问题。

同一个模块没有问题,如果我不嵌套的话

这是一个小例子,我在其中显示 table 和来自 input$

的数据
library(shiny)

# Selection module ----
select_module_ui <- function(id){
    tagList(
        selectInput(inputId = NS(id, "select1"),
                    label = "Select 1 from ui-section",
                    choices = c("Denmark", "Germany"),
                    selected = "Denmark"),
        htmlOutput(outputId = NS(id, "select2_ui")),
        tableOutput(outputId = NS(id, "myinputs"))
    )
}

select_module_server <- function(id) {
    moduleServer(id, function(input, output, session) {

        all_inputs <- reactive({
            myvalues <- NULL
            for(i in 1:length(names(input))){
                myvalues <- as.data.frame(rbind(myvalues,(cbind(names(input)[i],input[[names(input)[i]]]))))
            }
            names(myvalues) <- c("User Input","Last Value")
            myvalues
        })

        output$select2_ui <- renderUI({
            selectInput(inputId = NS(id, "select2"),
                        label = "Select 2 from server-section",
                        choices = c("Denmark", "Germany"),
                        selected = "Denmark")
        })

        output$myinputs <- renderTable({all_inputs()})
    })
}

# Container module -----
container_module_ui <- function(id){
        select_module_ui(id = NS(id, "select_module"))
}

container_module_server <- function(id) {
    moduleServer(id, function(input, output, session) {
        select_module_server(id = "select_module")
    })
}


# Application -----
ui <- fluidPage(
    h2("As a normal module"),
    select_module_ui(id = "select_module_normal"),
    hr(),
    h2("As a submodule within a module"),
    container_module_ui(id = "container_module")
)

server <- function(input, output, session) {
    select_module_server(id = "select_module_normal")
    container_module_server(id = "container_module")
}

shinyApp(ui, server)

不嵌套时input$的信息。嵌套时信息

我怀疑我在 module_container_server 中使用 NS(id, ...) 调用有问题,但其他服务器元素显示正确(selectInputrenderTable).使用 NS(id, ...)

调用 select_server 无效
container_module_server <- function(id) {
    moduleServer(id, function(input, output, session) {
        select_module_server(NS(id, "select_module"))
    })
}

谢谢, 拉斯

如果你需要在服务器中使用NS(),那么你需要session$ns():

output$select2_ui <- renderUI({
      selectInput(inputId = session$ns("select2"),
                  label = "Select 2 from server-section",
                  choices = c("Denmark", "Germany"),
                  selected = "Denmark")
    })