对行取消选择dataTable

时间:2017-03-13 03:26:08

标签: r shiny observable dt

我有一个闪亮的应用程序,它有一个DT :: renderDataTable,用户可以在数据表中选择一行。

以下代码只会打印FALSE(选择行时):

observeEvent(input$segment_library_datatable_rows_selected, {
  print(is.null(input$segment_library_datatable_rows_selected))
})

如果取消选择某行,如何进行打印? (打印值为TRUE)

3 个答案:

答案 0 :(得分:3)

据我所知,如果选择sel()中的一行,则以下是一个有效的最小示例(datatable被动为TRUE:

library(shiny)
library(DT)
ui <- fluidPage(
  DT::dataTableOutput("datatable"),
  textOutput("any_rows_selected")
)
server <- function(input, output) {
  # Output iris dataset
  output$datatable <- DT::renderDataTable(iris, selection = "single")
  # Reactive function to determine if a row is selected
  sel <- reactive({!is.null(input$datatable_rows_selected)})  
  # Output result of reactive function sel
  output$any_rows_selected <- renderText({
    paste("Any rows selected: ", sel())
  })
}
shinyApp(ui, server)

答案 1 :(得分:2)

或者,您可以使用watch()来响应对$ datatable_rows_selected输入的任何匹配,包括NULL。

重新利用Kristoffer W. B.的代码:

library(shiny)
library(DT)
ui <- fluidPage(
  DT::dataTableOutput("testtable")
)

server <- function(input, output) {
  # Output iris dataset
  output$testtable<- DT::renderDataTable(iris, selection = "single")


  # Observe function that will run on NULL values
  an_observe_func = observe(suspended=T, {
                    input$testtable_rows_selected
                    isolate({
                      #do stuff here
                      print(input$testtable_rows_selected)
                      })
                    })

  #start the observer, without "suspended=T" the observer 
  #  will start on init instead of when needed
  an_observe_func$resume()

shinyApp(ui, server)

一些注意事项:

1)我发现最好以挂起模式启动观察器,这样在程序初始化时它就不会启动。您可以随时打开它...观察...(例如,呈现数据表之后,或想要开始跟踪选择之前)。

2)使用隔离阻止观察者跟踪多个元素。在这种情况下,观察者应该只对input $ testtable_rows_selected做出反应,而不是其他任何事情。此问题的症状是,您的观察者一次更改会多次触发。

答案 2 :(得分:-1)

observeEvent(input$selected,ignoreNULL = FALSE,{...})

ignoreNULL默认为TRUE。设置为FALSE可以取消选择时观察到事件。