2017-01-05 3 views
0

Ich habe eine kleine app wie folgt aus:Shiny: Wie Rhandson Tabelle auf Standard zurückgesetzt?

require(shiny) 
require(shinyjs) 
require(rhandsontable) 

shinyApp(ui = fluidPage(useShinyjs(), 
         div(id = 'div1', 
          titlePanel("RHOT - Form"), 
          fluidRow(column(width = 3,selectizeInput("Trialid","What Iteration is this?",choices = c('1','2-3','4-7','8-15'))), 
            column(width = 3,textInput("Techie_Name","Your Name",value='EE')), 
            column(width = 3,textInput("lab_id","LAB ID",value='NA')), 
            column(width = 3,textInput("email","Your Email ID",value='[email protected]')) 
          ), 
          h4('Observations:'), 
          rHandsontableOutput("handsontable_obs"), 
          actionButton("SaveObs", "Save Observations") 
          ), 
         shinyjs::hidden(div(id = 'SubmitMsg', 
              h3("Thanks for submitting the Observations!"), 
              actionLink('addNextObs',"Add Another Observation")) 
             ) 
         ), 
     server = function(input, output,session){ 
      output$handsontable_obs = renderRHandsontable({ 
      rhandsontable(data.frame(Obs_itr = c(1:5), 
             Val1 = rep(0,5), 
             Val2 = rep(0,5))) 
      }) 

      observeEvent(input$SaveObs,{ 
      shinyjs::reset("div1") 
      shinyjs::hide("div1") 
      shinyjs::show("SubmitMsg") 
      }) 

      observeEvent(input$addNextObs,{ 
      shinyjs::show("div1") 
      shinyjs::hide("SubmitMsg") 
      }) 
     } 
) 

Wenn ich es laufen, kann ich die Eingabefelder sowie die Tabellen bearbeiten. Wenn Sie die Schaltfläche zum Speichern drücken, wird dieses Div zurückgesetzt (unter Verwendung von shinyjs::reset), versteckt und ein verstecktes Dankeschön erscheint. Durch Klicken auf einen anderen Aktionslink im 2. div wird das Original wieder aktiviert. Nun werden die Eingabefelder auf ihre Standardwerte zurückgesetzt, mit Ausnahme der handsontable.

Frage ist, wie stelle ich sicher, dass die Handsontable auf Standardwerte zusammen mit den anderen Eingabefeldern zurückgesetzt?

+0

Nur ein Kommentar auf shinyjs :: Reset - es funktioniert nur auf nativen glänzenden Elementen . Es wird nicht erwartet, dass es auf randsontable oder anderen Add-on-Widgets funktioniert. –

+0

Ich dachte mir, dass ich tatsächlich nach Ideen für eine Workaround suche :) – jackStinger

+0

Sie könnten Ihre eigene js-Funktion schreiben, um den Wert auf null zurückzusetzen. – SBista

Antwort

0

ein reactiveValue und ein bisschen mehr Details auf dem rhandsontable Hinzufügen den Job erledigt, aber das kann nicht sehr effizient sein:

shinyApp(ui = fluidPage(useShinyjs(), 
         div(id = 'div1', 
          titlePanel("RHOT - Form"), 
          fluidRow(column(width = 3,selectizeInput("Trialid","What Iteration is this?",choices = c('1','2-3','4-7','8-15'))), 
            column(width = 3,textInput("Techie_Name","Your Name",value='EE')), 
            column(width = 3,textInput("lab_id","LAB ID",value='NA')), 
            column(width = 3,textInput("email","Your Email ID",value='[email protected]')) 
          ), 
          h4('Observations:'), 
          rHandsontableOutput("handsontable_obs"), 
          actionButton("SaveObs", "Save Observations") 
         ), 
         shinyjs::hidden(div(id = 'SubmitMsg', 
              h3("Thanks for submitting the Observations!"), 
              actionLink('addNextObs',"Add Another Observation")) 
         ) 
), 
server = function(input, output,session){ 

    vals <- reactiveValues(reset=TRUE) 

    output$handsontable_obs = renderRHandsontable({ 
    input$addNextObs 
    if(isolate(vals$reset) | is.null(input$handsontable_obs)) { 
     isolate(vals$reset <- FALSE) 
     df <- data.frame(Obs_itr = c(1:5), 
         Val1 = rep(0,5), 
         Val2 = rep(0,5)) 
    } else df <- hot_to_r(input$handsontable_obs) 
    rhandsontable(df) 
    }) 

    observeEvent(input$SaveObs,{ 
    shinyjs::reset("div1") 
    shinyjs::hide("div1") 
    shinyjs::show("SubmitMsg") 
    vals$reset <- TRUE 
    }) 

    observeEvent(input$addNextObs,{ 
    shinyjs::show("div1") 
    shinyjs::hide("SubmitMsg") 
    }) 
} 
) 
Verwandte Themen