R 在Shining app中编辑数据表后,下载按钮消失
我已将可编辑表格包含在我在组织中开发的闪亮应用程序中。用这个简单的例子来说明这个问题。这是这个的延伸 在这个应用程序中,我编辑任何单元格后,下载按钮就消失了。有人知道为什么会这样吗?先谢谢你R 在Shining app中编辑数据表后,下载按钮消失,r,shiny,dt,shinyjs,R,Shiny,Dt,Shinyjs,我已将可编辑表格包含在我在组织中开发的闪亮应用程序中。用这个简单的例子来说明这个问题。这是这个的延伸 在这个应用程序中,我编辑任何单元格后,下载按钮就消失了。有人知道为什么会这样吗?先谢谢你 library(shiny) library(DT) library(dplyr) # UI ui = fluidPage( selectInput("nrows", "select n entries", choices = 100
library(shiny)
library(DT)
library(dplyr)
# UI
ui = fluidPage(
selectInput("nrows",
"select n entries",
choices = 100:150,
selected = 100,
multiple = FALSE),
downloadButton("download1", "Download iris as csv"),
DTOutput('tbl'),
checkboxGroupInput(
'datacols',
label='Select Columns:',
choices= c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species'),
selected = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species'),
inline=TRUE)
)
# SERVER
server = function(input, output) {
dat = reactiveValues()
observe ({
dat$dat = iris[1:input$nrows, ]
})
# render DT
output$tbl = renderDT({
datatable(dat$dat,
editable = "cell",
callback = JS(
"$('div.dwnld').append($('#download1'));",
"var checkboxes = $('input[name=datacols]');",
"checkboxes.each(function(index,value){",
" var column = table.column(index+1);",
" $(this).on('click', function(){",
" if($(this).prop('checked')){",
" column.visible(true);",
" }else{",
" column.visible(false);",
" }",
" });",
"});"
),
extensions = "Buttons",
options = list(
dom = 'B<"dwnld">frtip',
buttons = list("copy")
)
)
})
observeEvent(input[["tbl_cell_edit"]], {
cellinfo <- input[["tbl_cell_edit"]]
dat$dat <<- editData(dat$dat, cellinfo, "tbl")
})
output$download1 <- downloadHandler(
filename = function() {
paste("data_", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(dat$dat %>% select(one_of(input$datacols)), file)
}
)
}
shinyApp(ui, server)
库(闪亮)
图书馆(DT)
图书馆(dplyr)
#用户界面
ui=fluidPage(
选择输入(“nrows”,
“选择n个条目”,
选项=100:150,
所选=100,
多重=假),
下载按钮(“下载1”,“下载虹膜为csv”),
DTOutput('tbl'),
checkboxGroupInput(
“datacols”,
label='Select Columns:',
选择=c(‘萼片长度’、‘萼片宽度’、‘花瓣长度’、‘花瓣宽度’、‘种类’),
选择=c('萼片长度','萼片宽度','花瓣长度','花瓣宽度','种'),
内联=真)
)
#服务器
服务器=功能(输入、输出){
dat=反应值()
观察({
dat$dat=iris[1:输入$nrows,]
})
#渲染DT
输出$tbl=renderDT({
数据表(dat$dat,
可编辑=“单元格”,
回调=JS(
“$('div.dwnld').append($('download1'));”,
“var复选框=$('input[name=datacols]');”,
“复选框。每个(函数(索引、值){”,
“var column=table.column(索引+1);”,
“$(this).on('单击',函数(){”,
“如果($(this.prop('checked')){”,
“column.visible(true);”,
“}否则{”,
“column.visible(false);”,
" }",
" });",
"});"
),
extensions=“Buttons”,
选项=列表(
dom='Bfrtip',
按钮=列表(“复制”)
)
)
})
observeEvent(输入[[“tbl_单元格编辑”]]{
cellinfo您可以通过在DT::renderDT中设置server=FALSE
并添加“csv”来解决此问题作为Bfrtip datatables中的一个按钮。但是设置server=FALSE
会将整个表一次发送到浏览器,如果您的表很大,这是不好的。@raymkchowsever=FALSE
是另一种解决方案。但是我遇到了另一个问题。我有一个与此相关的问题。