Передача реактивных значений сервера модулям - PullRequest
0 голосов
/ 20 апреля 2019

У меня блестящее приложение с серверной функцией, например так;

shinyServer(function(input, output) {
 chosen_fam <- reactive({ input$fam })

  output$newui <- renderUI({  NewProductUI("newproduct", fam = chosen_fam()) })
  output$newbtn <- renderUI({ NewProductButtonUI("newproduct", fam =  chosen_fam()) })

  callModule(NewProduct, id = "newproduct", fam =  chosen_fam())
})

Внутри модуля NewProduct есть что-то вроде этого:

NewProduct <- function(input, output, session, fam){
  observeEvent(input$submitnew, {
    print(paste0("Adding.... ", fam))

    row <- c(fam, input$variable)
    upload_to_googlesheets(token, row)
})

Интерфейс отображается в зависимости отВыбранная семья и серверный модуль также делают разные вещи в зависимости от семьи.

Интерфейс рендеринга, кажется, работает нормально, но переменная "fam" в callModule не обновляется (следовательно, это всегда результат первого выбранного семейства).Переменные из входных данных проходят нормально, поэтому я предполагаю, что это как-то связано с областью видимости (возможно, он ищет «fam» в пространстве имен «newproduct»?).

Как явно указать callModule использовать реактивное выражение из пространства имен сеанса?Или есть способ, которым я могу просто добавить переменную fam в пространство имен "newproduct"?

1 Ответ

0 голосов
/ 21 апреля 2019

Вы должны указать сам реактивный проводник:

callModule(NewProduct, id = "newproduct", fam =  chosen_fam)

(без скобок).А в модуле:

row <- c(fam(), input$variable)

(скобки).

...