在回答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")
答案 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")