无法使用ShinyJS重置闪亮应用程序中的输入

时间:2019-03-18 20:44:19

标签: r shiny shinyjs

在回答here之后,我尝试使用shinyjs重设输入值,方法是将id中的div赋予UI并在单击重置时。下面是我尝试过的代码。

library(shiny)
library(DT)
library(dplyr)
library(shinyjs)

#### Module 1 renders the first table
tableMod <- function(input, output, session, modelRun,reset,modelData,budget){

  output$x1 <- DT::renderDataTable({
    modelRun()
    isolate(
      datatable(
        modelData %>% 
          mutate(Current  = as.numeric(Current)*(budget())),
        selection = 'none', editable = TRUE
      )
    )
  })

  observeEvent(reset(), {
    shinyjs::reset("input-panel")
  })  
}
tableUI <- function(id) {
  ns <- NS(id)
  dataTableOutput(ns("x1"))
}

ui <- function(request) {
  fluidPage(
    div(shinyjs::useShinyjs(), id = "input-panel",
    tableUI("opfun"),
    numericInput("budget_input", "Total Forecast", value = 2),
    actionButton("opt_run", "Run"),
    actionButton("opt_reset", "Reset")
  ))
}

server <- function(input, output, session) {

  df <- data.frame(Channel = c("A", "B","C"),
                   Current = c(2000, 3000, 4000),
                   Modified = c(2500, 3500,3000),
                   New_Membership = c(450, 650,700),
                   stringsAsFactors = FALSE)

  callModule( tableMod,"opfun",
              modelRun = reactive(input$opt_run),
              reset = reactive(input$opt_reset),
              modelData = df,
              budget = reactive(input$budget_input))

  observeEvent(input$opt_run, {
    cat('HJE')
  })

}

shinyApp(ui, server, enableBookmarking = "url")

1 个答案:

答案 0 :(得分:0)

这是部分解决方案,其中实际上不需要run按钮。由于input$budget_input是反应性值,因此该表会随着输入值的更改而自动刷新。

library(shiny)
library(DT)
library(dplyr)
library(shinyjs)

tableUI <- function(id) {
  ns <- NS(id)
  tagList(

    div(id = ns("input-panel"),
    h1("Tests "),

    numericInput(ns("budget_input"), "Total Forecast", value = 2),
    actionButton(ns("opt_run"), "Run"),
    actionButton(ns("opt_reset"), "Reset"),

    dataTableOutput(ns("x1"))
    )
  )



}


#### Module 1 renders the first table
tableMod <- function(input, output, session,modelData){


 # observeEvent(input$opt_run, ignoreInit = TRUE, {
 #   Multiplier <- reactiveVal(input$budget_input)
 #   cat(Multiplier())
 # })


#  observeEvent(input$opt_run,{

    output$x1 <-  DT::renderDataTable({

   #  isolate(
    datatable(
      modelData %>% 
        mutate(Current  = as.numeric(Current)*(input$budget_input)),
      selection = 'none', editable = TRUE
        )
  #  )
  })
    #})


  observeEvent(input$opt_reset,{

    shinyjs::reset("input-panel")

    })
#  }) 

}



ui <- fluidPage(
  useShinyjs(debug = TRUE),    
  tableUI("opfun")
)

server <- function(input, output, session) {

  df <- data.frame(Channel = c("A", "B","C"),
                   Current = c(2000, 3000, 4000),
                   Modified = c(2500, 3500,3000),
                   New_Membership = c(450, 650,700),
                   stringsAsFactors = FALSE)

  callModule( tableMod,"opfun",
             # modelRun = reactive(input$opt_run),
           # reset = reactive(input$opt_reset),
              modelData = df
           #   budget = reactive(input$budget_input)
           )



}

shinyApp(ui, server, enableBookmarking = "url")