2016-04-13 8 views
0

Ich versuche die ausgewählten Zeilen in einem gvistable zu identifizieren, das in einem glänzenden Dashboard verwendet wird. Ich habe die Schritte in der Demo (EventListener) befolgt, aber aus irgendeinem Grund kann ich die ausgewählte Zeile nicht identifizieren.R Shiny: gvistable kann die ausgewählte Zeile nicht aufrufen

Hier ist ein vereinfachter und modifizierter Code, um die Frage zu klären.

library(shiny) 
library(googleVis) 
ui <- dashboardBody(box(title = "data table",width = 4, htmlOutput("dt")), 
     verbatimTextOutput("row")) 

server <- shinyServer(function(input,output,session){ 
    datatable <- data.frame("symbol" = c("alpha", "beta", "gamma")) 

    output$dt <- renderGvis({ 
    d <- gvisTable(datatable, chartid = "mytable", options = list(gvis.listener.jscode= " 
     var sel = chart.getSelected(); 
     var row = sel[0].row; 
     var text = data.getValue(row,1); 
     Shiny.onInputChange('text'); 
     ")) 
    }) 
    output$row <- renderPrint({ 
    input$text 
    }) 
}) 
shinyApp(ui, server) 

Ich bekomme immer NULL Ausgabe auf dem verbatimtextoutput. Kann mir bitte jemand auf den Fehler hinweisen, den ich hier mache ?! Ich habe zahlreiche Suchen in den Foren versucht, konnte aber keine Lösung finden.

+0

Können Sie einen Link zu der Demo hinzufügen, die Sie verwendet haben? –

+0

sicher .. es ist 'demo (EventListener)' –

Antwort

0

Ich hätte die Frage vielleicht gar nicht stellen sollen, weil die Lösung sehr einfach ist. Aber, vielleicht wird dies für andere Benutzer nützlich sein, es ist eine coole Option, wenn Sie andere Graphen oder Funktionen haben, die die Objekte in einem gvistable als Eingabe verwenden. Hier ist das Update

d <- gvisTable(datatable, chartid = "mytable", options = list(gvis.listener.jscode = 
"var text = data.getValue(chart.getSelection()[0].row,0); 
Shiny.onInputChange('text', text.toString());") 

Dies macht den Unterschied, Shiny.onInputChange zwei Argumente und ich hatte die zweite verpasst.

Hoffe das hilft anderen Menschen, etwas ähnliches zu versuchen. BTW, eine andere mögliche Arbeit ist mit shinyjs. Das werde ich auch versuchen.