【发布时间】:2017-06-26 00:56:16
【问题描述】:
我正在尝试制作一个用户可以在表格中输入值的应用。
所以我使用 data.frame 命令创建了一个表格,并使用常规闪亮的 ui 和服务器代码在应用程序的 HTML 上绘制了表格。
我面临的问题是表格是“只读”格式,我不知道如何从闪亮的 HTML 页面上绘制的这种表格中读取值。
请给我建议任何更改
提前谢谢你
【问题讨论】:
我正在尝试制作一个用户可以在表格中输入值的应用。
所以我使用 data.frame 命令创建了一个表格,并使用常规闪亮的 ui 和服务器代码在应用程序的 HTML 上绘制了表格。
我面临的问题是表格是“只读”格式,我不知道如何从闪亮的 HTML 页面上绘制的这种表格中读取值。
请给我建议任何更改
提前谢谢你
【问题讨论】:
在原生闪亮中,dataTableOutputs 和 tableOutputs 始终是只读的。如果您想要更多功能,则必须获得附加包。这是我知道的两个选项。他们都需要一些跑腿。
rhandsontable 允许访问可以从客户端更改的类似EXCEL 的表。通过适当的设置,更改后的表甚至可以在服务器端访问。如需进一步阅读,我建议 Stéphane Laurents 回复 this question。DT 包为您提供了一种在服务器端访问选定行的方法。这可用于实现“删除行”功能。要添加行,您必须自己使用 textInputs、selectInputs 等编写此代码,但这相当简单。这两个包都可以通过 CRAN 和 GitHub 获得。
我个人更喜欢选项 2,因为在大多数情况下,添加行/删除行界面会节省很多。如果您让您的用户可以在表格中填写他们想要的任何内容,那么服务器将不高兴。
这是展示第二种方法的最小示例
library(DT)
library(shiny)
ui = fluidPage(
actionButton("delete_rows", "Delete selected rows"),
DT::dataTableOutput("mytable")
)
server = function(input, output, session){
serverTable = reactiveVal(mtcars)
output$mytable = DT::renderDataTable({
serverTable()
})
observeEvent(input$delete_rows, {
serverTable(serverTable()[-input$mytable_rows_selected,])
})
}
shinyApp(ui,server)
【讨论】: