R блестящий наблюдающийEvent не работает в функции в модуле - PullRequest
0 голосов
/ 01 июня 2018

Заранее благодарю за помощь.Я пытался свести мою проблему к такому простому приложению, какое только мог создать.У меня есть функция sliderResetInput, которая вызывает наблюдаемое событие и возвращает некоторые элементы пользовательского интерфейса.Я могу использовать sliderResetInput вне модуля (будет продемонстрировано ниже), но я не могу использовать его внутри модуля.Я думал, что это была проблема с обертыванием пространства имен вокруг моих входов, но я думаю, что все удостоверение личности здесь проверено.В чем дело?Как примечание, хотя эта конструкция кажется слишком сложной для этого приложения, мне нужна структура для гораздо большего приложения.

Это работает:

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))

С той же функцией sliderResetInput (),это НЕ работает:

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)
}


myModuleUI = function(id) {
  ns = NS(id)

  tagList(
    uiOutput(outputId = ns("sliders"))
  )
}



myModule = function(input, output, session) {
  ns = session$ns

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

  output$sliders = renderUI(getSliders())
}

server <- function(input, output, session) {
  callModule(myModule, id = "A")
  observeEvent(input$browser, browser())
}


ui <- fluidPage(
  myModuleUI(id = "A"),
  actionButton(inputId = "browser", "Click me to go into browser()")
)


shinyApp(ui = ui, server = server, options = list(launch.browser = T))

Кто-нибудь знает, что здесь происходит?

Спасибо, что уделили время!

1 Ответ

0 голосов
/ 09 июня 2019

Вы должны префикс идентификаторов только виджетов.То есть:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...