R Shiny: реактивное значение в модале не работает - PullRequest
0 голосов
/ 07 марта 2019

Заголовок моего modalDialog - это реактивное значение.Как только определенный вход изменяется в модальном, я хотел бы изменить заголовок.Я пробовал несколько разных способов и не смог заставить его работать без проблем.Заголовок либо не обновляется, либо обновляется, если я закрываю / снова открываю модальное окно, либо заставляет модал полностью перерисовываться при немедленном обновлении заголовка.

В настоящее время я застрял на последнем(модальный рендеринг полностью).Однако, когда я создал минимальный воспроизводимый пример (ниже), заголовок обновляется только в том случае, если я закрываю и открываю модальное окно.

ui<-fluidPage(
  actionButton(inputId="model", label="Edit Model")
)

server<-function(input, output, session) {
  rv<-reactiveValues(header="Standard Model")

  observeEvent(input$model, {
    showModal(
      modalDialog(
        fluidPage(
          fluidRow(h3(rv$header)),
          sliderInput(inputId="factor_1", "Factor #1", value=70, min=0, max=100),
          sliderInput(inputId="factor_2", "Factor #2", value=30, min=0, max=100)
        ),
        footer=modalButton("Save Weights"), size="s", easyClose=TRUE
      )
    )
  })

  observe({if (!is.null(input$factor_1)) {
    if (input$factor_1!=70) {
      rv$header<-"Custom Model"
      }
    }
  })
}

shinyApp(ui=ui, server=server)

По сути, я хочу, чтобы заголовок изменился с 'Стандартная модель' на 'Пользовательская модель »(без закрытия / повторного открытия или повторного рендеринга модальной модели) после первого изменения входа для фактора № 1.

1 Ответ

1 голос
/ 07 марта 2019

Использование renderUI/uiOutput:

library(shiny)

ui <- fluidPage(
  actionButton("model", label = "Edit Model") 
)

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

  rv <- reactiveValues(header = "Standard Model")

  observeEvent(input[["model"]], {
    showModal(
      modalDialog(
        fluidPage(
          uiOutput("modalTitle"),
          sliderInput("factor_1", "Factor #1", value=70, min=0, max=100),
          sliderInput("factor_2", "Factor #2", value=30, min=0, max=100)
        ),
        footer = modalButton("Save Weights"), 
        size="s", easyClose=TRUE
      )
    )
  })

  output[["modalTitle"]] <- renderUI({
    fluidRow(h3(rv$header))
  })

  observe({
    if (!is.null(input$factor_1)) {
      if (input$factor_1 != 70) {
        rv$header <- "Custom Model"
      }
    }
  })

}

shinyApp(ui=ui, server=server)

enter image description here

...