2014-02-06 16 views
7

Es gibt viele Fragen über conditionalPanel in R glänzend, aber ich verstehe immer noch nicht, wie ich Werte verwenden kann, die von server.R für conditionalPanel erstellt werden. Hier ist, was ich gerne tun würde: Ich habe eine URL wie http://some-url.com/php/session_check.php?sid=session_id. Wenn die session_id mit einer 0 beginnt, wie http://some-url.com/php/session_check.php?sid=00221245, wird eine Zeichenfolge mit einem Benutzernamen zurückgegeben (z. B. "testuser"). Wenn die session_id mit einer anderen Zahl als 0 beginnt, wird 0 wie http://some-url.com/php/session_check.php?sid=10221245 zurückgegeben. Jetzt möchte ich ein Panel ausblenden, je nachdem, ob die a 0 oder ein Benutzername zurückgegeben wird. Deshalb versuche ich, so etwas zu tun:R glänzend conditionalPanel Ausgabewert

conditionalPanel(
condition="output.disable_ui!=0" 

Ich weiß, dass dies die falsche ist, aber ich weiß nicht wirklich verstehen, wie das condition Argument für outputs funktioniert, wie das gleiche funktionieren wird, wenn ich tun würde dies alle input von ui.R.

Hier ist mein Beispielcode:

server.R

library(shiny) 
library(raster) 
library(rgdal) 

shinyServer(function(input, output, clientData) { 

    output$disable_ui<-reactive({ 
    query<-parseQueryString(clientData$url_search) 
    url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="") 
    read.table(url_path) 
    }) 

    data <- reactive({ 
    inFile <- input$example_layer 

    if (is.null(inFile)) 
     return(NULL) 
    raster.file<- raster(inFile$datapath) 
    }) 

    output$raster.plot <- renderPrint({ 
    "Nothing to see here" 
    }) 
}) 

ui.R

library(shiny) 

shinyUI(pageWithSidebar(

    headerPanel("test"), 

    sidebarPanel(
    conditionalPanel(
     condition="output.disable_ui!=0", 

    #File Upload 
    fileInput('example_layer', 'Choose Raster Layer (ASCII)', multiple=FALSE, accept='asc') 

)), 

    mainPanel(
    verbatimTextOutput("raster.plot") 
) 
)) 
+0

Wenn dies würde funktionieren, was passieren würde, ist, dass eine Datei-Upload-Button angezeigt wird (oder nicht), je nach der URL. Es wird keine Datei hochgeladen. Der Benutzer würde aufgefordert, nach dem Drücken der Schaltfläche nach einer Datei zu suchen und sie auszuwählen. Ist es das was du willst? – Vincent

+0

Es geht nicht wirklich um die Schaltfläche zum Hochladen von Dateien. Alles was ich will ist, dass das Sidebar-Panel oder sogar alle Panels nicht angezeigt werden, wenn die URL eine '0' zurückgibt und alle Panel angezeigt werden, wenn die URL einen 'Benutzernamen' zurückgibt. –

Antwort

7

Ich denke, dass die output im Ui gemacht werden müssen, wenn Sie möchten es im Zustand einer conditionalPanel verwenden.

Mit Ihnen Beispiel die HTML für die bedingte Panel wird wie etwa wie folgt aussehen:

<div data-display-if="output.disable_ui!=0">

Wenn keine Elemente auf Ihrer Seite (als Ausgaben in der Server-Seite erstellt) die id „Disable_UI "dann ist die Bedingung" output.disable_ui! = 0 "immer TRUE und das Bedingungsfeld wird immer angezeigt.

Ein einfaches Beispiel:

shiny::runApp(list( 
    ui = pageWithSidebar(

    headerPanel("test"), 

    sidebarPanel(
     selectInput(
     "var", "Var", 
     0:9)), 

    mainPanel(
     verbatimTextOutput("id"), 
     conditionalPanel(
     condition="output.id!=0", 
     h4('Visible') 
    ) 
    ) 
), 
    server = function(input, output) { 

    output$id<-reactive({input$var}) 

    } 
)) 

Wenn Sie eine Zahl ungleich 0 die conditionnal Tafel angezeigt werden wählen. Kommentieren Sie jetzt die Zeile verbatimTextOutput("id"),, es gibt kein Element mehr mit der ID "id" auf der Seite und der Zustand des bedingten Feldes <div data-display-if="output.id!=0"> kann nicht FALSE sein.

+0

Danke @Julien Navarre, um die Ausgabe zu machen hat den Trick für mich gemacht. –

10

@Julien Navarra hat recht: Die Ausgabe muss gerendert werden. Es sei denn, Sie setzen ihre Option suspendWhenHidden-FALSE:

output$disable_ui<-reactive({ 
    query<-parseQueryString(clientData$url_search) 
    url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="") 
    read.table(url_path) 
    }) 
    outputOptions(output, 'disable_ui', suspendWhenHidden=FALSE) 
+0

kann das im Detail beschreiben? Was macht 'suspendWhenHidden'? Ich habe nur die Zeile in meinem Code kopiert und es hat nicht funktioniert. Aber es klingt nach einer wirklich interessanten Lösung, die ich gerne verstehen würde.Danke –

+2

@ user2524906 Ich weiß nicht, technische Details, aber konkret, wenn es auf "TRUE" gesetzt ist, dann wird die Ausgabe "erkannt" nur, wenn es gerendert wird. Dies ist die sauberste Lösung. Ein anderes Beispiel hier: http://StackOverflow.com/Questions/19686581/Make-ConditionalPanel-Depend-On-Files-Uploaded-with-fileinput –

+0

@ StéphaneLaurent Vielen Dank. – zero323

Verwandte Themen