2016-08-04 13 views
2

In meiner Shiny-Anwendung versuche ich, Logik einzubinden, um eine Aktionsschaltfläche anzuzeigen oder auszublenden, je nachdem, ob eine andere Benutzereingabe in ui.R definiert ist. Ich kann nicht die uiOutput/renderUI-Funktionalität verwenden, um dies aufgrund einiger anderer Komplexitäten in der Anwendung zu tun.Beobachten Sie das Ereignis zum Ausblenden der Aktionsschaltfläche in Shiny

Mein Ansatz besteht darin, einen Beobachter für eine Eingabe zu erstellen und dann die Aktionsschaltfläche mithilfe von CSS-Tags entsprechend ein- oder auszublenden. Ich kenne CSS und daher den Kampf nicht.

Dies ist ui Form in meiner Anwendung -

enter image description here

Nun, ich habe eine reaktive Funktion locationSpecified das anzeigt, ob kehrt die Eingabestelle leer ist oder nicht, und auf dieser Grundlage muss ich ein- oder ausblenden der "RUN" Knopf.

Hier ist, wie ich die Taste "RUN" in ui.r bin Hinzufügen ...

fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN"))) 

Dies ist, was ich in server.R versuche (aber offensichtlich nicht funktioniert) ...

observe({ 
    if(locationSpecified() == 1) 
     tags$head(tags$style(type="button/css", ".btn {display: inline-block}")) 
    if(locationSpecified() == 0) 
     tags$head(tags$style(type="button/css", ".btn {display: none}")) 
    }) 

Ich hoffe, dass die Reparatur zu diesem ist nicht so kompliziert, und ich würde mich freuen, wenn Sie mir sagen können, wie man das zur Arbeit bringt.

Vielen Dank im Voraus,

Ashish

+1

Das 'shinyjs' Paket hat eine' toggle' Funktion, die das macht, was Sie wollen. Ein 'conditionalPanel' würde ebenfalls funktionieren. – Carl

Antwort

3

Verstanden endlich mit shinyjs arbeiten.

#ui 
useShinyjs(), 
fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN")))) 

#server 
observe({ 
    shinyjs::hide("action") 

    if(locationSpecified()) 
    shinyjs::show("action") 
}) 

Dank carl für den Hinweis mich shinyjs.

5

Sie könnten ein conditionalPanel wie so verwenden:

#UI 
conditonialPanel(condition='input.location!=null && input.location!=""', 
fluidRow(column(6, align="center", offset = 3, actionButton("action", "RUN")))) 

Oder Sie könnten shinyjs ‚s toggle verwenden:

#UI 
useShinyjs() # include useShinyjs() somewhere in UI 
#server 
observe({ toggle(id="action", condition=!is.null(input$location))}) 
+0

'beobachten ({toggle (id =" action ", condition = locationSpecified())})' funktioniert hier nicht (nicht sicher warum). Ich habe viele verschiedene Dinge ausprobiert, damit dieser Schalter funktioniert. – ashishkul