R 使用基于事件的交互生成DT对象的模块
我正在构建一个闪亮的应用程序,它有多个“可编辑”表,用户可以在其中添加新行、编辑现有行,并将这些数据写回数据源 我一直在模块中编写代码,以保持代码分离,因此我有一个用于“用户”的模块,我想让用户表利用“editableDT”模块 基于我有表和添加按钮显示,但似乎观察事件没有触发 该模块需要如何修改,以便内部模块能够观察按钮按下情况 包含代码以便于阅读:R 使用基于事件的交互生成DT对象的模块,r,shiny,shiny-reactivity,R,Shiny,Shiny Reactivity,我正在构建一个闪亮的应用程序,它有多个“可编辑”表,用户可以在其中添加新行、编辑现有行,并将这些数据写回数据源 我一直在模块中编写代码,以保持代码分离,因此我有一个用于“用户”的模块,我想让用户表利用“editableDT”模块 基于我有表和添加按钮显示,但似乎观察事件没有触发 该模块需要如何修改,以便内部模块能够观察按钮按下情况 包含代码以便于阅读: editableDT <- function(input , output
editableDT <- function(input
, output
, session
, table) {
output$table <- DT::renderDataTable(table(),
server = FALSE)
proxy <- DT::dataTableProxy("table")
observeEvent(input$add, {
proxy %>% addRow(table()[1, ])
})
}
editableDTInput <- function(id) {
ns <- NS(id)
tagList(actionButton(ns("add"), "Add Row"))
}
users <- function(input
, output
, session) {
users <- reactive({
iris
})
user <- callModule(editableDT, "usertbl", users)
output$tblui <- renderUI(tagList(editableDTUI(session$ns("usertbl"))))
}
usersUI <- function(id) {
ns <- NS(id)
tagList(editableDTInput("usertbl"),
uiOutput(ns("tblui")))
}
ui <- function() {
fluidPage(usersUI("sample"))
}
server <- function(input, output, session) {
callModule(users, "sample")
}
shinyApp(ui, server)
editableDT您没有提供editableDTUI
。我想是的
editableDTUI <- function(id) {
ns <- NS(id)
DTOutput(ns("table"))
}
editableDTUI
usersUI <- function(id) {
ns <- NS(id)
tagList(editableDTInput("usertbl"),
uiOutput(ns("tblui")))
}
usersUI <- function(id) {
ns <- NS(id)
tagList(editableDTInput(ns("usertbl")),
uiOutput(ns("tblui")))
}