2017-05-11 9 views
0

私は3つのデータセットをタブセットパネルでレンダリングしていますが、1つのデータテーブルの現在のページを他のものに保持する必要があります。たとえば、私がdatatable1のページ1にいて、2ページ目に行く場合、datatable2と3を2ページにしたいとします。光沢のあるデータテーブルのページ間を維持する

これは私が持っているコードです。

shinyApp(
    ui = fluidPage(
     tags$head(
     # hides the default search functionality 
     tags$style(
      HTML(".dataTables_filter, .dataTables_info { display: none; }") 
     ) 
    ), 
     fluidRow(
     column(10, 
       "" 
     ), 
     column(2,    
       uiOutput("pageFilter") 
       #numericInput("page", "Page", 1, min = 1) 
     ), 
     column(12, 
       tabsetPanel(
       tabPanel('pressure', 
          DT::dataTableOutput("mytable1")), 
       tabPanel('mtcars', 
          DT::dataTableOutput("mytable2")), 
       tabPanel('iris', 
          DT::dataTableOutput("mytable3")) 
       ) 
     ) 
    ) 
    ) 

答えて

1

重要な部分はstateSaveパラメータを使用することで、以下を参照:

library(DT) 
library(shiny) 
app <- shinyApp(
    ui = fluidPage(
    tags$head(
     # hides the default search functionality 
     tags$style(
     HTML(".dataTables_filter, .dataTables_info { display: none; }") 
    ) 
    ), 
    fluidRow(
     column(10, 
      "" 
    ), 
     column(2,    
      # adding new page filter 
      uiOutput("pageFilter") 
    ), 
     column(12, 
      tabsetPanel(id = "tab", 
       tabPanel('pressure', 
        dataTableOutput('table1') 
       ), 
       tabPanel('mtcars', 
        dataTableOutput('table2') 
       ) 
      ) 
    ) 
    ) 
), 
    server = function(input, output) { 

    global <- reactiveValues() 

    observe({ 
     global$val <- input$table1_state$start/input$table1_state$length + 1 
    }) 

    observe({ 
     global$val <- input$table2_state$start/input$table2_state$length + 1 
    }) 

    output$pageFilter <- renderUI({ 
     numericInput("page", "Page", global$val, min = 1) 
    }) 

    output$table1 <- DT::renderDataTable({ 
     iris 
    }, options = list(pageLength = 5, stateSave = TRUE)) 

    output$table2 = DT::renderDataTable({ 
     mtcars 
    }, options = list(pageLength = 5, stateSave = TRUE)) 

    # using new page filter 
    observeEvent({input$page; input$tab}, { 
     dataTableProxy("table1") %>% selectPage(global$val) 
     dataTableProxy("table2") %>% selectPage(global$val) 
    }) 

    } 
) 

runApp(app, launch.browser = TRUE) 
関連する問題