【问题标题】:Replace options in R Shiny datatable on the fly动态替换 R Shiny 数据表中的选项
【发布时间】:2020-04-30 02:23:12
【问题描述】:

我想即时更改数据表的语言

我有以下代码

output$prr2 <- renderDataTable({  
prr()}, options = list(
autoWidth = TRUE,
columnDefs = list(list(width = '50', targets = c(1, 2) ) ),
language = list(url = if(getLanguage()=='gr') '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json' else  
  '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json' ))

getLanguage() 返回 selected_language 的值,prr() 返回一个data.frame。

我想做这样的事情,以便在下拉 selected_language 中选择不同的语言后更改表格的选项

proxy = dataTableProxy('prr2')
observeEvent(input$selected_language,{ replace language option of datatable prr2})

对此有什么想法吗?

【问题讨论】:

  • 你的意思是language = list(url = if(getLanguage()=='gr') ...... 不起作用?
  • 第一次调用 renderDataTable 时确实有效。但我想根据选择刷新它。每次语言选择改变时,我都希望数据表改变它的语言

标签: r shiny dt


【解决方案1】:

我无法测试,因为您没有提供可重现的示例。我会试试的

output$prr2 <- renderDataTable({  
  prr()
}, options = exprToFunction(list(
  autoWidth = TRUE,
  columnDefs = list(list(width = '50', targets = c(1, 2))),
  language = list(
    url = ifelse(getLanguage()=='gr', 
                 '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                 '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
  )
)))

编辑

output$prr2 <- renderDataTable({  
  datatable(
    prr(),
    options = exprToFunction(list(
      autoWidth = TRUE,
      columnDefs = list(list(width = '50', targets = c(1, 2))),
      language = list(
        url = ifelse(getLanguage()=='gr', 
                     '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                     '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
      )
    )
    )
  )
})

编辑 2

完整的应用程序:

library(shiny)
library(DT)

ui <- fluidPage(
  radioButtons("language", "Language", choices = c("gr", "en")),
  DTOutput("prr2")
)

server <- function(input, output, session){
  output$prr2 <- renderDT({  
    datatable(
      iris,
      options = exprToFunction(list(
        autoWidth = TRUE,
        columnDefs = list(list(width = '50', targets = c(1, 2))),
        language = list(
          url = ifelse(input$language=='gr', 
                       '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                       '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
        )
      ))
    )
  })
}

shinyApp(ui, server)

【讨论】:

  • 如果唯一的变化是exprToFunction,看来这个解决方案对我不起作用。当我用 id selected_language 更改 doropdown 的值时,数据表的翻译没有任何反应,我应该添加 getLanguage() 返回 selected_language 的值
  • 我已经复制粘贴了您的代码,它不会产生错误但不起作用。 prr() 返回一个data.frame
  • stackoverflow.com/questions/56879672/… github.com/rstudio/DT/issues/168 这里有一些相关的例子,但是那里的代码替换了数据而不是选项
  • @vagelis 对我来说有效。也许你不使用好的renderDataTable。使用renderDTDT::renderDataTable
  • 是的,这行得通。我用 input$selected_language 更改了 getLanguage() 并且它有效(我不明白为什么)。谢谢!另外,您能否解释一下 exprToFunction 为什么起作用?
猜你喜欢
  • 2018-07-02
  • 2021-11-25
  • 2017-01-09
  • 2022-01-02
  • 2018-11-14
  • 1970-01-01
  • 2018-04-21
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多