0

我有一个像这样的小应用程序:

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='eeshanchatterjee@gmail.com'))
                            ),
                            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")
           })
         }
)

当我运行它时,我可以编辑输入字段以及表格。点击保存按钮后,此 div 将重置(使用shinyjs::reset)、隐藏,并显示一个隐藏的谢谢 div。单击第二个 div 上的另一个操作链接会重新打开原始操作链接。现在, ass 输入字段被重置为其默认值,除了handsontable.

问题是,如何确保handsontable 与其他输入字段一起重置为默认值?

4

1 回答 1

0

reactiveValue在 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='eeshanchatterjee@gmail.com'))
                            ),
                            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")
  })
}
)
于 2017-01-26T20:29:14.717 回答