R shinyjs 禁用函数在从另一个模块获取输入的模块中不起作用

R shinyjs disable function not working in module that takes input from another module

下面的代码是我在一个更大的应用程序中构建的最小示例,我无法弄清楚为什么 output_module.R 中的 textInput 没有被禁用。如果有人能提供帮助,将不胜感激!

app.R

library(shiny)
library(shinyjs)

# Define UI
ui <- fluidPage(
    
    useShinyjs(),

    # Application title
    titlePanel("Demo"),

    # Sidebar 
    sidebarLayout(
        sidebarPanel(
            input_module_ui("input")
        ),

        mainPanel(
            output_module_ui("output")
        )
    )
)

# Define server logic 
server <- function(input, output, session) {
    
    callModule(input_module_server, "input")
    res <- callModule(input_module_server, "input")
    
    callModule(output_module_server, "output", res)
    
}

# Run the application 
shinyApp(ui = ui, server = server)

input_module.R

#Define ui
input_module_ui <- function(id) {
  ns <- NS(id)
  
  tagList(
    textInput(
      inputId = ns("input"),
      label = "Input:",
      value = "A"
      )
    )
}

#Define server logic 
input_module_server <- function(input, output, session) {
  
  #List of things to return for use in other modules
  return(input)
  
}

output_module.R

#Define ui
output_module_ui <- function(id){
  ns <- NS(id)

  tagList(
        textInput(inputId = ns("output"),
                     label = "Output:", 
                     value = ""
                  )
      )
}

#Define server logic 
output_module_server <-
  function(input,
           output,
           session,
           module_input) {

    observe({
      
      output <- module_input$input
      updateTextInput(session, "output", value = output)
      disable(id = session$ns("output"))
      
    })
  }

感谢@Limey 解决了这个问题。这是已编辑模块的正确代码。

output_module.R

#Define ui
output_module_ui <- function(id){
  ns <- NS(id)

  tagList(
        textInput(inputId = ns("output"),
                     label = "Output:", 
                     value = ""
                  )
      )
}

#Define server logic 
output_module_server <-
  function(input,
           output,
           session,
           module_input) {

    observe({
      
      output <- module_input$input
      updateTextInput(session, "output", value = output)
      disable(id = "output") #This line was edited to resolve the issue.
      
    })
  }