2017-01-04 2 views
9

Versehen Sidebar in flexdashboard aktualisieren, wenn Sie auf eine Registerkarte klicken. Kann es nicht zur Arbeit bringen.Eingang mit shinyjs und flexdashbord dynamisch ein-/ausblenden

--- 
title: "Test Sidebar" 
output: 
    flexdashboard::flex_dashboard: 
    orientation: rows 
runtime: shiny 
--- 

```{r setup} 
library(flexdashboard) 
library(shiny) 
library(shinyjs) 
useShinyjs(rmd = TRUE) 
``` 
Sidebar {.sidebar data-width=250} 
======================================================================= 

```{r} 
div(id = "one", selectInput("input1",label= "Show Always",choices=c("a","b","c")))  
div(id = "two",selectInput("input2",label = "Show only on Tab 1", choices=c("d","e","f"))) 
``` 

<!-- Update the sidebar based on the tab chosen. Generated HTML code shown for tabs--> 

Tab 1 <!-- <a href="#section-tab-1" aria-expanded="true" data-toggle="tab"> --> 
======================================================================= 
```{r} 
useShinyjs(rmd = TRUE) 
shinyjs::onclick("#section-tab-2",shinyjs::hide(id = "two")) 
shinyjs::onclick("#section-tab-1",shinyjs::show(id = "two")) 
``` 

Tab 2 <!-- <a href="#section-tab-2" aria-expanded="true" data-toggle="tab"> --> 
======================================================================= 
```{r} 
useShinyjs(rmd = TRUE) 
actionButton("hideSlider", "Hide Input Two") 
observeEvent(input$hideSlider, { 
    shinyjs::toggle(id = "two", anim = TRUE) 
    }) 
``` 

Funktioniert in Ordnung mit actionButton() und observerEvent(). Irgendwelche Vorschläge geschätzt.

+0

Versuchen Sie, eine 'ID' zu Ihren Links hinzuzufügen und rufen Sie diese ID stattdessen im 'onclick' auf. – NicE

Antwort

1

Einige Kommentare:

  • Sie müssen nur useShinyjs() einmal anrufen, keine Notwendigkeit, es in jedem Code Chunk zu nennen

  • onclick() nimmt die ID des Elements. Nicht der Selektor - die ID. Das bedeutet, dass Sie onclick("element") statt onclick("#element")

  • rufen Wenn Sie an der HTML aussehen, die vom Armaturenbrett erzeugt wird, werden Sie sehen, dass es kein Element mit der ID „section-Tab-2“, also was Sie‘ Re versucht zu tun wird nicht funktionieren

  • In regulären glänzenden Anwendungen, wenn ich eine tabsetPanel() verwende, ist die Art, wie ich das tue, was Sie tun möchten, indem Sie den Wert der ausgewählten Registerkarte verwenden. Wenn eine Registerkarte ausgewählt ist, gibt es einen Eingabewert, der Ihnen den Wert der Auswahl angibt. Ich habe Flexdashboard nicht ausgiebig verwendet, daher bin ich mir nicht sicher, ob es eine ähnliche Möglichkeit gibt, den Wert des ausgewählten Tabs in einem Flexdashboard zu erhalten.

+0

Danke @daattali für die Eingabe. Ich habe herumgesucht und im Moment denke ich nicht, dass es mit flexdashboard relativ einfach zu lösen ist. – iboboboru