R glänzend: Aktualisiere ausgewählte Eingabewerte in data.table
Ich habe renderDataTable mit ausgewählten Eingängen und Schaltflächen im Inneren. Ich möchte selectInput inside datatable aktualisieren, nachdem ich in der entsprechenden Zeile auf die Schaltfläche "Speichern" geklickt habe. Wie kann ich das machen? Bei der Suche nach einer Lösung stellte ich fest, dass "wenn Sie die Tabelle erneut rendern, die Eingaben nur funktionieren, wenn Sie zusätzlichen Code zum Aufheben der Bindung hinzufügen". Allerdings bin ich neu in glänzenden und mit js-Optionen, so wäre ich für alle Hinweise / Lösungen dankbar.
library(shiny)
library(DT)
runApp(list(
ui = basicPage(
h2('The mtcars data'),
DT::dataTableOutput('mytable'),
h2("Selected"),
tableOutput("checked")
),
server = function(input, output) {
# helper function for making checkbox
shinyInput = function(FUN, len, id, ...) {
inputs = character(len)
for (i in seq_len(len)) {
inputs[i] = as.character(FUN(paste0(id, i), ...))
}
inputs
}
# datatable with checkbox
output$mytable = DT::renderDataTable({
data.frame(mtcars,Rating=shinyInput(selectInput,nrow(mtcars),"selecter_",label=NULL,
choices=1:5, width="60px"),
Save = shinyInput(actionButton, nrow(mtcars),'button_',
label = 'Save',onclick = 'Shiny.onInputChange(\"select_button\", this.id)' ))
}, selection='none',server = FALSE, escape = FALSE, options = list(
paging=TRUE,
preDrawCallback = JS('function() {
Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() {
Shiny.bindAll(this.api().table().node()); } ')
) )
# helper function for reading checkbox
shinyValue = function(id, len) {
unlist(lapply(seq_len(len), function(i) {
value = input[[paste0(id, i)]]
if (is.null(value)) NA else value
}))
}
# output read checkboxes
output$checked <- renderTable({
data.frame(selected=shinyValue("selecter_",nrow(mtcars)))
})
}
))