繁体   English   中英

R Shiny,DT :: replaceData在callModule中不起作用

[英]R Shiny, DT::replaceData in callModule not working

在R Shiny应用程序中,我尝试使用DT::replaceData更新数据以保留当前状态(例如过滤)显示。 虽然它可以与简单的闪亮应用程序一起使用,但是当我对应用程序进行模块化并从callModule调用callModule

在下面的示例中,应该在顶部的框中选择物种,以触发数据替换,如下所示。

这是一个工作示例:

library(shiny)

ui <- fluidPage(
  selectInput('species', 'Choose Species',
              choices=unique(iris$Species),
              selected=unique(iris$Species), multiple=TRUE),
  DT::dataTableOutput('dt')
)

server <- function(input, output, session) {
  output$dt <- DT::renderDataTable({
    DT::datatable(
      iris, filter='top',
      options = list(autoWidth=TRUE)
    )
  })

  observeEvent(is.null(input$species), {
    DT::replaceData(
      DT::dataTableProxy('dt'),
      dplyr::filter(iris, Species %in% input$species)
    )
  })
}

shinyApp(ui, server)

这是无法使用的模块化版本:

library(shiny)

ui <- function(id) {
  ns <- NS(id)
  tagList(
    selectInput(ns('species'), 'Choose Species',
                choices=unique(iris$Species),
                selected=unique(iris$Species), multiple=TRUE),
    DT::dataTableOutput(ns('dt'))
  )
}

server <- function(input, output, session) {
  output$dt <- DT::renderDataTable({
    DT::datatable(
      iris, filter='top',
      options = list(autoWidth=TRUE)
    )
  })

  observeEvent(is.null(input$species), {
    print(input$species)
    DT::replaceData(
      DT::dataTableProxy('dt'),
      dplyr::filter(iris, Species %in% input$species)
    )
  })
}


mainUi <- fluidPage(ui('app'))
mainSrv <- function(input, output, session) {
  callModule(server, 'app')
}
shinyApp(mainUi, mainSrv)

我想知道为什么第二个示例不起作用,以及如何解决(如果可能)。


更新资料

解决了!

自DT v0.3起已修复。 参见: https : //github.com/rstudio/DT/issues/357

自v3.0起已解决。 参考: https : //github.com/rstudio/DT/issues/357

因此,只需解决:

install.packages('DT')
packageVersion('DT')
# [1] ‘0.4’

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM