在不同选项卡中使用的Shiny模块中的observeEvent问题

z9ju0rcb  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(97)

我的闪亮应用程序面临挑战我设计了一个有两个标签的UI,每个标签都有自己的重置按钮。我们的想法是使用一个Shiny模块来处理这些按钮的服务器逻辑。但是,我遇到了一个问题,单击重置按钮不会触发任何响应。
下面是我的代码的简化片段:

library(shiny)

# UI for Reset Button
reinitButtonUI <- function(id) {
  ns <- NS(id)
  actionButton(ns("ReinitData"), "Reset", class = "btn-lg btn-secondary")
}

# Server logic for Reset Button
reinitButtonServer <- function(input, output, session, mode_transport) {
  ns <- session$ns

  observeEvent(input[[ns("ReinitData")]], {
    print(paste("Reset button clicked for transport mode:", mode_transport))
    reinit_data(mode_transport)
  })
}

reinit_data <- function(mode_transport) {
  print(paste("Function reinitialiser_donnees called for transport mode:", mode_transport))
}

# Main UI
ui <- fluidPage(
  tabsetPanel(
    tabPanel("Land",
             reinitButtonUI("landModule")
    ),
    tabPanel("Helicopter",
             reinitButtonUI("helicopterModule")
    )
  )
)

# Main Server
server <- function(input, output, session) {
  callModule(reinitButtonServer, "landModule", mode_transport = "land")
  callModule(reinitButtonServer, "helicopterModule", mode_transport = "helicopter")

  print("Server function loaded.")
}

# Run the App
shinyApp(ui, server)

我已经包含了一些print语句来跟踪流,但是在单击reset按钮时,没有任何东西被打印到控制台,这表明observeEvent没有被触发。
我相信我的模块逻辑应该允许标签之间的差异,并有相应的复位按钮作出相应的React。然而,它并没有像预期的那样工作。
任何关于可能出现问题的见解,或关于如何在单击重置按钮时触发触发事件的建议,将不胜感激!
提前感谢您的帮助。

bd1hkmkf

bd1hkmkf1#

当访问模块的输入值时,你不需要使用ns-如果你将input[[ns("ReinitData")]]改为input$ReinitData,你会发现它像你期望的那样工作。

相关问题