1

クリックされた行から要素を取得する方法のこの例に従っています。選択した行が強調表示されないことを除いて、これは正常に機能します。コードは次のとおりです。

library(DT)
library(shiny)

runApp(shinyApp(
  ui = fluidPage(DT::dataTableOutput('tab'), verbatimTextOutput('row')),
  server = function(input, output) {
    output$tab = DT::renderDataTable({
      datatable(iris, selection = 'single',
                callback = JS("table.on('click.dt', 'tr',
                                function() {
                                  $(this).toggleClass('selected');
                                  Shiny.onInputChange('row', table.rows('.selected').data().toArray());
                                });")
      )
    })
    output$row = renderText({input$row})
  }
))
4

1 に答える 1

0

なぜDTに存在しなかったのinput$..._rows_selectedですか?お気に入り

library(shiny)
library(DT)


runApp(shinyApp(
  ui = fluidPage(DT::dataTableOutput('tab'), verbatimTextOutput('row')),
  server = function(input, output) {
    output$tab = DT::renderDataTable({
      datatable(iris, selection = "single"
      )
    })
    output$row = renderText({if(length(input$tab_rows_selected)>0) paste(input$tab_rows_selected,as.character(iris[input$tab_rows_selected,]))})
  }
      ))

アップデート

たとえば、動的データがあります

dt1=reactive({
return(iris[iris$Species %in% c("setosa","versicolor"),])})

他のデータ操作がある可能性があります

あなたのコードよりも

runApp(shinyApp(
  ui = fluidPage(DT::dataTableOutput('tab'), verbatimTextOutput('row')),
  server = function(input, output) {
    dt1=reactive({
      return(iris[iris$Species %in% c("setosa","versicolor"),])})
    output$tab = DT::renderDataTable({
      datatable(dt1(), selection = "single"
      )
    })
    output$row = renderText({if(length(input$tab_rows_selected)>0) paste(input$tab_rows_selected,as.character(dt1()[input$tab_rows_selected,]))})
  }
      ))

私のDTバージョン 0.1.45

更新 2

理由はわかりません$(this).toggleClass('selected'); が、標準のDTパッケージに追加された選択されたクラスを削除すると思います(toggleClass2回使用しても何も表示されません)。

試す

JS("table.on('click.dt', 'tr',
                              function() {
                                                           Shiny.onInputChange('row', table.rows(this).data().toArray());
                              });")

または設定selection='none'

于 2016-04-01T08:02:58.943 に答える