R观察事件未在模块中的功能中工作

R观察事件未在模块中的功能中工作,r,module,shiny,R,Module,Shiny,提前感谢您的帮助。我试图将我的问题归结为一个尽可能简单的应用程序。我有一个函数sliderResetInput,它调用一个observeEvent并返回一些UI元素。我可以在模块外使用sliderResetInput(将在下面演示),但不能在模块内使用它。我认为这是一个在我的输入周围包装名称空间的问题,但我认为ID都在这里签出了。发生什么事?需要注意的是,虽然这个应用程序的结构似乎不必要的复杂,但我需要一个更大的应用程序的结构 这项工作: library(shiny) # Version 1.0

提前感谢您的帮助。我试图将我的问题归结为一个尽可能简单的应用程序。我有一个函数sliderResetInput,它调用一个observeEvent并返回一些UI元素。我可以在模块外使用sliderResetInput(将在下面演示),但不能在模块内使用它。我认为这是一个在我的输入周围包装名称空间的问题,但我认为ID都在这里签出了。发生什么事?需要注意的是,虽然这个应用程序的结构似乎不必要的复杂,但我需要一个更大的应用程序的结构

这项工作:

library(shiny) # Version 1.0.5

sliderResetInput = function(id, input, output, session) {

  observeEvent(input[[paste0(id, "_reset_slider")]], 
               updateSliderInput(session = session, inputId = paste0(id, "_slider"), value = c(0, 10)))

  out = list(
    sliderInput(inputId = paste0(id, "_slider"), label = "Slider", min = 0, max = 10, value = c(0, 10)),
    actionButton(inputId = paste0(id, "_reset_slider"), label = "Reset slider")
  )

  return(out)
}


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

  getSliders = reactive(sliderResetInput(id = "test1", input, output, session))

  output$sliders = renderUI(getSliders())

  observeEvent(input$browser, browser())
}


ui <- fluidPage(
  uiOutput(outputId = "sliders"),
  actionButton(inputId = "browser", "Click me to go into browser()")
)


shinyApp(ui = ui, server = server, options = list(launch.browser = T))
library(闪亮)#版本1.0.5
sliderResetInput=函数(id、输入、输出、会话){
observeEvent(输入[[paste0(id,“\u reset\u slider”)]],
updateSliderInput(session=session,inputId=paste0(id,“_滑块”),value=c(0,10)))
out=列表(
sliderInput(inputId=paste0(id,“_slider”),label=“slider”,min=0,max=10,value=c(0,10)),
actionButton(inputId=paste0(id,“\u reset\u slider”),label=“reset slider”)
)
返回(输出)
}

服务器您只需为小部件的ID添加前缀。即:

sliderResetInput = function(id, NSid, input, output, session) {

  observeEvent(input[[paste0(id, "_reset_slider")]], {
    updateSliderInput(session = session, inputId = paste0(id, "_slider"), value = c(0, 10))
  })

  out = list(
    sliderInput(inputId = paste0(NSid, "_slider"), label = "Slider", min = 0, max = 10, value = c(0, 10)),
    actionButton(inputId = paste0(NSid, "_reset_slider"), label = "Reset slider")
  )

  return(out)
}


这种结构对我来说毫无意义。为什么不将
observeEvent
放入模块的服务器部分以及
moduleUI
中的输入?@GyD,基本上,我必须对这些类型的输入进行任意数量的处理,因此我需要一个类似sliderResetInput()的函数对我来说,能够保存从函数返回的列表非常重要。是否有任何功能无法实现?您可以通过
runGist(“https://gist.github.com/dgyurko/dceaf1514e7f5cdbeee1f183bf11a0e9“”
sliderResetInput = function(id, NSid, input, output, session) {

  observeEvent(input[[paste0(id, "_reset_slider")]], {
    updateSliderInput(session = session, inputId = paste0(id, "_slider"), value = c(0, 10))
  })

  out = list(
    sliderInput(inputId = paste0(NSid, "_slider"), label = "Slider", min = 0, max = 10, value = c(0, 10)),
    actionButton(inputId = paste0(NSid, "_reset_slider"), label = "Reset slider")
  )

  return(out)
}
  getSliders = reactive(sliderResetInput(id = "test1", NSid = ns("test1"), input, output, session))