Наблюдать за событием с updateMaterialSwitch в блестящем модуле, не обновляя ввод - PullRequest
1 голос
/ 25 мая 2020

Я хочу обновить свой materialSwitch внутри блестящего модуля с помощью ObserverEvent, событие запускается, но updateMaterialSwitch не меняет входное значение. Мой фрагмент кода:

# app server
app_server <- function(input, output, session) {
  r <- reactiveValues()
  observe(r$is_load <- is_load()) # basic reactive true/false - switching according to condition
  callModule(mod_1_server, "1", r = r)
}

# mod_1_server
mod_1_server <- function(input, output, session, r) {

  output$switch_uncumulate_tagvals <- renderUI({
    materialSwitch(
      inputId = "uncumulate_tagvals",
      label = "label",
      value = FALSE,
      status = "warning"
    )
  })

  observeEvent(req(r$is_load() == TRUE), {
    updateMaterialSwitch(session = session,
                         inputId = "uncumulate_tagvals",
                         value = TRUE)
  })

  observeEvent(req(r$is_load() == FALSE), {
    updateMaterialSwitch(session = session,
                         inputId = "uncumulate_tagvals",
                         value = FALSE)
  })

}

Когда наблюдаемые события находятся на app_server, все работает. Когда я перемещаю их на mod_1_server, события запускаются, но ожидаемое значение input $ uncumulate_tagval (мой inputId) никогда не изменяется. Я предполагаю, что эта проблема может быть связана с сессией, но я не знаю, как ее решить. Есть предложения?

1 Ответ

1 голос
/ 26 мая 2020

Я думаю, что проблема связана с отсутствием спецификации пространства имен с использованием session$ns()

# mod_1_server
mod_1_server <- function(input, output, session, r) {

  # namespace fonction
  ns <- session$ns

  output$switch_uncumulate_tagvals <- renderUI({
    materialSwitch(
      inputId = ns("uncumulate_tagvals"),
      label = "label",
      value = FALSE,
      status = "warning"
    )
  })

  observeEvent(req(r$is_load() == TRUE), {
    updateMaterialSwitch(session = session,
                         inputId = "uncumulate_tagvals",
                         value = TRUE)
  })

  observeEvent(req(r$is_load() == FALSE), {
    updateMaterialSwitch(session = session,
                         inputId = "uncumulate_tagvals",
                         value = FALSE)
  })

}

Если вам нужна дополнительная информация о том, как преобразовать как модуль, вы можете прочитать это сообщение в блоге: https://rtask.thinkr.fr/communication-between-modules-and-its-whims/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...