2014-09-18 4 views
5

Ich habe die folgende Vorlage für meine glänzende App erstellt.Shiny auswählen gehen Sie zu verschiedenen TabPanel mit der Aktionsschaltfläche oder etwas

 ##ui.R 
     shinyUI(navbarPage("My Application", 
     tabPanel 
     (
     "Select Data range", 
     sidebarLayout 
     (
      sidebarPanel 
      (
       h3("Select Data Range"), 
       selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(), 
       dateRangeInput("dates", label = h3("Select Date range")),br(), 
       submitButton("Submit"),br(), 
       actionButton("action", label = "Proceed to select resolution") 
      ), 
      mainPanel("Output") 
     ) 
    ), 

     tabPanel 
     (
     "Select Resolution", 
     sidebarLayout 
     (
      sidebarPanel 
      (
       h3("Select Resolution"), 
       numericInput("num", label = h3("Select X-Grid Size"), value = 2),br(), 
       numericInput("num", label = h3("Select Y-Grid Size"), value = 2),br(), 
       numericInput("num", label = h3("Outlier Removal"), value = 2),br(), 
       numericInput("num", label = h3("Frequency"), value = 2),br(), 
       submitButton("Submit"),br(), 
       #actionButton("action", label = "Proceed to Service Parameters") 
      ), 
      mainPanel("Output") 
     ) 
    ) 

    )) 

Und der Server-Datei wird nun leer gehalten:

 ##server.R 
     shinyServer(function(input, output) { 
     }) 

Das Problem ist ideal wäre ich auf den ersten TabPanel eine Eingabe wie Aktionstaste verwenden möchten, um zweite Registerfeld zu navigieren. Jeder Vorschlag über eine Alternative würde gleichermaßen geschätzt werden.

Antwort

8

Sie können eine benutzerdefinierte Nachricht senden:

ui.R

shinyUI(navbarPage("My Application", 

       tabPanel 
       (
       "Select Data range", 
       sidebarLayout 
       (
        sidebarPanel 
        (tags$head(tags$script(' 
            Shiny.addCustomMessageHandler("myCallbackHandler", 
             function(typeMessage) {console.log(typeMessage) 
              if(typeMessage == 1){ 
              console.log("got here"); 
              $("a:contains(Select Resolution)").click(); 
              } 
              if(typeMessage == 2){ 
              $("a:contains(Select Data range)").click(); 
              } 
              }); 
              ')), 
        h3("Select Data Range"), 
        selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(), 
        dateRangeInput("dates", label = h3("Select Date range")),br(), 
        actionButton("action", label = "Proceed to select resolution") 
        ), 
        mainPanel("Output") 
       ) 
       ), 

       tabPanel 
       (
       "Select Resolution", 
       sidebarLayout 
       (
        sidebarPanel 
        (
        h3("Select Resolution"), 
        numericInput("num1", label = h3("Select X-Grid Size"), value = 2),br(), 
        numericInput("num2", label = h3("Select Y-Grid Size"), value = 2),br(), 
        numericInput("num3", label = h3("Outlier Removal"), value = 2),br(), 
        numericInput("num4", label = h3("Frequency"), value = 2),br(), 
        actionButton("action1", label = "Proceed to Service Parameters") 

        ), 
        mainPanel("Output"), 

       ) 
       ) 

)) 

server.R

library(shiny) 
shinyServer(function(input, output,session) { 
    observe({ 
    if(input$action > 0){ 
     print('1') 
     session$sendCustomMessage("myCallbackHandler", "1") 
    } 
    }) 
    observe({ 
    if(input$action1 > 0){ 
     print('2') 
     session$sendCustomMessage("myCallbackHandler", "2") 
    } 
    }) 
} 
) 

Sie können auch keine Objekte haben mit den gleichen IDs. Beachten Sie, dass alle Ihre numericInput und actionButton die gleiche ID hatten. Auch ich habe die Sendeschaltflächen nicht sicher entfernt, dass du mehr als einen von diesen willst.

+0

Danke, das ist genau das, was ich brauchte. Die Objekte hatten die gleiche ID, da dies nur das Grundlayout der App war und ich sie umbenennen wollte, da ich sie in server.R verwende. – anonR

Verwandte Themen