Shiny:如何将 rhandson 表重置为默认值?

Posted

技术标签:

【中文标题】Shiny:如何将 rhandson 表重置为默认值?【英文标题】:Shiny: How to reset rhandson table to default? 【发布时间】:2017-05-20 05:52:58 【问题描述】:

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

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 上的另一个操作链接会重新打开原始操作链接。 现在,除了handsontable 之外,输入字段已重置为其默认值。

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

【问题讨论】:

只是对 shinyjs::reset 的评论——它只适用于原生闪亮元素。预计不适用于 rhandsontable 或其他附加小部件 我想了这么多-我实际上正在寻找一些解决方法的想法:) 您可以编写自己的js函数将值重置为null。 【参考方案1】:

添加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")
  )

)

【讨论】:

以上是关于Shiny:如何将 rhandson 表重置为默认值?的主要内容,如果未能解决你的问题,请参考以下文章

在 Shiny 上设置“重置值”按钮

如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?

如何在 ORACLE TABLE 上重置列的默认值

在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?

如何将透明的“大标题”UINavigationBar 重置为默认外观设置?

在 Shiny 中将数据从 rhandsontable 对象转换为数据框