0

我已经从一个模块定义了我的操作按钮,如下所示。

现在它在按下时无法触发观察事件。我认为模块是独立的并且自给自足,但似乎不是。将它放在我的服务器中效果很好,但我不想弄乱我的服务器。

任何的想法?

cool_UI <- function(id) {
  ns <- NS(id)
  tagList(
  uiOutput(ns("myUi"))
  )
}

cool <- function(input, output, session) {

  observeEvent(input$butonid,{
    print("Button from Module")
  })

  output$myUi <- renderUI({
    tabsetPanel(

      tabPanel(title = "sometitle",actionButton("butonid","My Button"))
    )
  })
}

library(shiny)

ui <- fluidPage(
  cool_UI("myUi")
)

server <- function(input, output, session) {
  callModule(cool,"myUi")
}

shinyApp(ui, server)

4

1 回答 1

4

您需要命名您在模块服务器函数中创建的按钮的 ID。

cool <- function(input, output, session) {
  ns <- session$ns

  observeEvent(input$butonid,{
    print("Button from Module")
  })

  output$myUi <- renderUI({
    tabsetPanel(
      tabPanel(title = "sometitle",actionButton(ns("butonid"),"My Button"))
    )
  })
}

请注意在ns <- session$ns模块服务器功能的顶部包含。

input在模块服务器函数中命名空间,但用作小部件 ID 的文本字符串不是。

于 2020-06-10T15:43:25.887 回答