我正在构建一个具有多个“可编辑”表的闪亮应用程序,用户可以在其中添加新行,编辑现有行并将该数据写回到数据源。
我一直在编写模块以保持代码分离,因此我有一个用于“用户”的模块,并且我想让用户表利用“ editableDT”模块。
基于Yihui's shiny-proxy example,我看到了表格和“添加”按钮,但似乎未触发watch事件。
该模块如何进行修改,以使内部模块能够观察按钮按下情况?
包含代码以方便阅读:
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)
答案 0 :(得分:0)
您没有提供editableDTUI
。我认为是
editableDTUI <- function(id) {
ns <- NS(id)
DTOutput(ns("table"))
}
该应用在替换后即可运行
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")))
}