Условная панель не работает после модульности - PullRequest
0 голосов
/ 02 октября 2019

У меня странная проблема с условной панелью в блестящей приборной панели. Я сконфигурировал компоненты пользовательского интерфейса своей диаграммы так, как мне нужно вызывать его несколько раз.

Условная панель работает нормально, если я вызываю ее только один раз. Однако, если я попытался позвонить более одного раза, он перестал работать.

Ниже приведен воспроизводимый код:

library(shiny)
library(shinyWidgets)
library(shinydashboard)
library(shinydashboardPlus)
library(highcharter)
library(lubridate)

chartUI <- function(id) {
  ns <- NS(id)
  tagList(
    verbatimTextOutput(ns("group")),
    selectInput(ns("freq"),"Select frequency:",
                choices = list("Yearly" = "Y","Half yearly" = "H","Quarterly" = "Q",
                               "Monthly"="M"), selected = "Yearly", multiple = FALSE),
    dateInput(ns("dates"), "Select start date:",format = "yyyy-mm-dd", startview = "month", value = dmy("1/1/2014")),
    selectInput(ns("link"),"Select link ratio:",choices = list("All" = "all", "Standard" = "std"),selected = "all"),
    conditionalPanel("input.link == 'std'", ns=ns, sliderInput(ns("std.month"),"No of months:",min=1,max=119,value=60))
  )  
} 
ui <- shinyUI(
  ui = dashboardPagePlus(skin = "red",
                         header = dashboardHeaderPlus(
                           title = "TITLE",
                           titleWidth = 700
                         ),
                         dashboardSidebar(),
                         body = dashboardBody(
                           # boxPlus(
                           #   width = NULL,title = "CHART",closable = TRUE,enable_sidebar = TRUE,
                           #   sidebar_width = 15,sidebar_start_open =  FALSE,sidebar_content = chartUI("chartui1"),
                           #   highchartOutput("")
                           # ),

                           boxPlus(
                             width = NULL,title = "CHART",closable = TRUE,enable_sidebar = TRUE,
                             sidebar_width = 15,sidebar_start_open =  FALSE,sidebar_content = chartUI("chartui2"),
                             highchartOutput("")
                           )
                         ),
                         title = "DashboardPage"
  )
)

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

})

shinyApp(ui, server)

Если я вызываю только chartui2, условная панель работает нормально. Но если я назову и chartui1, и chartui2, они оба больше не будут работать.

1 Ответ

0 голосов
/ 02 октября 2019

Минимальный пример с uiOutput / renderUI будет следующим:

library(shiny)

dyn_ui <- function(id) {
  ns <- NS(id)
  tagList(selectInput(ns("show"), "show or not", choices = c("hide", "show")),
          uiOutput(ns("dyn")))
}

dyn_server <- function(input, output, session) {
  output$dyn <- renderUI({
    ns <- session$ns
    if (input$show == "show") {
      sliderInput(
        inputId = ns("std_month"),
        "No of months:",
        min = 1,
        max = 119,
        value = 60
      )
    }
  })
}

ui <- basicPage(dyn_ui("test"))

server <- function(input, output, session) {
  callModule(module = dyn_server, id = "test")
}

runApp(list(ui = ui, server = server))

Редактировать:

Фактически, минимальный пример хорошо работает с conditionalPanel тоже (см. ниже). Итак, что-то еще в вашем приложении вызывает конфликт. Не уверен, что это такое, но я бы начал добавлять компоненты один за другим и посмотреть, когда эти минимальные примеры начнут плохо себя вести.

library(shiny)

dyn_ui <- function(id) {
  ns <- NS(id)
  tagList(
    selectInput(ns("show"), "show or not", choices = c("hide", "show")),
    conditionalPanel(
      ns = ns,
      condition = "input.show == 'show'",
      sliderInput(
        inputId = ns("std_month"),
        "No of months:",
        min = 1,
        max = 119,
        value = 60
      )
    )
}

ui <- basicPage(
  dyn_ui("test"),
  dyn_ui("test2")
)

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

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