2017-05-09 62 views
2

每當用戶更改數據集頁分頁時,都需要更改輸入值。觀察數據表分頁事件Shiny

我試過使用觀察事件,但它不起作用。

UI

fluidRow(
    column(10, 
     "" 
), 
    column(2,    
     textInput("inText", "Input text 2", value = "Default text") 
), 
    column(12, 
     dataTableOutput('table') 
) 
) 

服務器

observeEvent(input$table, { 
    updateTextInput(session, "inText", value = paste("New text",0)) 
}) 

希望你能幫助我。

+0

是它涉及到另一個問題:那將分頁的變化,由於輸入字段,或者它可能是也引發「正常」的分頁按鈕? – BigDataScientist

+0

我試圖做的是分頁可以通過分頁按鈕和輸入正常更改。但是,如果我通常更改它,我希望輸入刷新到新頁面。 – JFernandez

+0

好的,那麼你應該使用'input $ table_state',它將包含分頁信息,... – BigDataScientist

回答

1

假設你的表ID是table在您的例子給出,你可以使用: input$table_state$start/input$table_state$length + 1

在下面一個完整的例子:

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, 
      dataTableOutput('table') 
    ) 
    ) 
), 
    server = function(input, output) { 

    output$pageFilter <- renderUI({ 
     val <- input$table_state$start/input$table_state$length + 1 
     numericInput("page", "Page", val, min = 1) 
    }) 

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

    # using new page filter 
    observeEvent(input$page, { 
     dataTableProxy("table") %>% selectPage(input$page) 
    }) 
    } 
) 

runApp(app, launch.browser = TRUE)