Tworzę aplikację Shiny, która wyświetla dane data.frame u góry ekranu i określone zmienne statystyki na dole. Użytkownik może nawigować po kolumnach data.frame, wchodząc w interakcję z obiektem DT::datatable
.Zaktualizuj wiersz (y) Shiny DataTable przy zachowaniu pozycji
Po kliknięciu przez użytkownika zmiennej wyświetlane są szczegółowe informacje, które można edytować. Chciałbym, aby te informacje zostały zaktualizowane i odzwierciedlone w datatable. Mój problem polega na tym, że kiedy aktualizuję tabelę, jest ona renderowana i pokazywana od samego początku. Jak mogę zachować stronę i wybór wiersza datatable po wprowadzeniu zmian?
Oto minimalny przykład roboczy, który pokazuje zestaw danych mtcars w DT::datatable
. Mam pewne elementy sterujące, które aktualizują pola. Zauważ, że datatable jest ponownie renderowany z powrotem na pierwszą stronę.
library(shiny)
runApp(shinyApp(
ui = fluidPage(
title = "minimal-working-example",
fluidRow(
column(3, inputPanel(
selectInput("field", "Field", choices = names(mtcars)),
numericInput("value", "Value", 0),
actionButton("submit", "Submit")
)),
column(9,
DT::dataTableOutput("table")
)
)
),
server = function(input, output) {
v <- reactiveValues(mtcars=mtcars)
observeEvent(input$submit, {
v$mtcars[input$field] <- input$value
})
output$table <- DT::renderDataTable({
DT::datatable(
v$mtcars,
selection = "single",
options = list(pageLength = 5))
})
}
))
Sesja Info:
Session info --------------------------
setting value
version R version 3.3.0 (2016-05-03)
system x86_64, mingw32
ui RStudio (0.99.902)
language (EN)
collate English_United States.1252
tz America/Chicago
date 2016-07-11
Packages -------------------------------
package * version date source
DT 0.1.45 2016-02-09 Github (rstudio/[email protected])
shiny * 0.13.0.9000 2016-02-08 Github (rstudio/[email protected])
Jest to trudne, ale wykonalne. Zasadniczo to, co musi się stać, to aktualna strona tabeli musi być zapisywana reaktywnie, co można zrobić za pomocą 'Shiny.onInputChange' w javascript. Następnie, gdy wyrenderujesz stół, oddzwonisz, aby otworzyć go na numer strony, który był wcześniej. Napiszę pełną odpowiedź, gdy dostanę szansę. – Carl