2016-04-14 21 views
1

Bir dataTableOutput öğesinde bir öğeyi tıklatıp başka bir tabPanel'e atlamanın bir yolu var mı?R Shiny: Tıkla ve farklı sekmelerden atlamak için değerleri atla

escape = FALSE kullanarak tablo öğesinin URL'sini ekleyebilirim. Ama bir dataTableOutput öğesine "farklı bir sekmeye atlamak" nasıl eklenir? Ve değerleri geçmek?

Lütfen yeniden üretilebilir örneğime bir göz atın. Teşekkürler. tüm bu şeyler Shinyserver tarafında yapılabilir beri

library(shiny) 

server <- function(input, output) { 
    X = data.frame(
    ID = c(
     "<a href = 'http://www.google.com'> google </a>", 
     "Click here then Jump to tab2 and pass x=2 and y=2 to tab2", 
     "Click here then Jump to tab2 and pass x=3 and y=4 to tab2" 
    ), 
    x = c(1, 2, 3), 
    y = c(10, 2, 4) 
) 
    output$datatable = renderDataTable({X}, escape = FALSE, 
    options = list(
    paging = FALSE, 
    searching = FALSE, 
    filtering = FALSE, 
    ordering = FALSE 
)) 
    output$text = renderText(paste("X = ", "Y = ")) 
} 

ui <- fluidPage(tabsetPanel(
    tabPanel("tab1", dataTableOutput("datatable")), 
    tabPanel("tab2", textOutput("text")) 
)) 

shinyApp(ui = ui, server = server) 

cevap

4

Neyse ki, JS veya jQuery gerek yoktur.

Tamam, nereden başlıyoruz ... DT, kullanıcı tarafından hangi satırların/sütunların/hücrelerin tıklandığını belirlemek için bir dahili geri arama özelliğine sahiptir. Örnek here. O zaman bu bilgiyi tab2'a "göndermek" için bir sebep yok, ancak bu bilgiyi istediğimiz gibi yapabiliriz. Metni tab2'da uygun şekilde ayarlamak gibi. Sekmeleri değiştirmek için parlak, herhangi bir köprü içermeyen sekmeleri değiştirmenize olanak veren updateTabsetPanel işlevine sahiptir. Bir changelog

Tür:

  • insertet işlevselliği için observeEvent.
  • iletişim sağlamak için tabsetPanel için kimliği eklenmiş tek satır geri arama almak için selected ve server niteliğini ekledi.
  • , google bağlantısından ve escape'dan kurtuldu.

Kodu:

library(shiny) 
library(DT) 

server <- function(input, output, session) { 
    X = data.frame(
    ID = c("Click here then Jump to tab2 and pass x=1 and y=10 to tab2", 
      "Click here then Jump to tab2 and pass x=2 and y=2 to tab2", 
      "Click here then Jump to tab2 and pass x=3 and y=4 to tab2"), 
    x = c(1,2,3), 
    y = c(10,2,4)  
) 

    output$datatable = renderDataTable({X}, selection = "single", server = FALSE, 
            options = list(paging=FALSE, 
                searching=FALSE, 
                filtering=FALSE, 
                ordering=FALSE) 
            ) 
    observeEvent(input$datatable_rows_selected, { 
    row <- input$datatable_rows_selected 
    output$text <- renderText({paste("X =", X[row, "x"], "Y =", X[row, "y"])}) 
    updateTabsetPanel(session, "mainPanel", selected = "tab2") 
    }) 
} 

ui <- fluidPage(

    tabsetPanel(id = "mainPanel", 
    tabPanel("tab1",dataTableOutput("datatable")), 
    tabPanel("tab2",textOutput("text")) 
) 
) 

shinyApp(ui = ui, server = server)