我已经从如下所示的模块中定义了操作按钮。
现在它在按下时无法触发观察事件。我本以为模块是独立的并且自给自足,但似乎不行。将其放在服务器中效果很好,但我不想使服务器混乱。
有什么想法吗?
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)
答案 0 :(得分:3)
您需要为在模块服务器功能中创建的按钮的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的文本字符串。