Блестящая кнопка во вложенном модуле не отображается;проблема пространства имен? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь собрать базовую панель инструментов с помощью пакета shinymaterial (https://ericrayanderson.github.io/shinymaterial/), но у меня возникла небольшая проблема, из-за которой мои раскрывающиеся меню (обычно selectInput в обычных блестящих приложениях) не отображаютсяво вложенном модуле пользовательского интерфейса.

Над кнопкой «Настройки» на этом снимке экрана должно быть два раскрывающихся меню: enter image description here

Вот фрагмент кода для моих лесовпока:

library(shiny)
library(shinymaterial)

# Wrap shinymaterial apps in material_page
ui <- material_page(
  title = "App Title",
  nav_bar_fixed = FALSE,
  nav_bar_color = "black",
  background_color = "white",
  # font_color = "black",

  # Place side-nav in the beginning of the UI
  material_side_nav(
    fixed = FALSE,
    # Place side-nav tabs within side-nav
    material_side_nav_tabs(
      side_nav_tabs = c(
        "Home" = "home",
        "About" = "about"
      ),
      icons = c("home", "help")
    ),
    background_color = "white"
  ),

  # Define side-nav tab content
  material_side_nav_tab_content(
    side_nav_tab_id = "home",

    material_row(
      material_column(
        material_card(title = NULL,
                      sidebarCharts("main"),
                      depth = NULL),
        width = 2,
        offset = 0
      ),
      material_column(
        material_card(title = NULL,
                      "Chart goes here",
                      depth = NULL),
        width = 10,
        offset = 0
      )
    )


  ),
  material_side_nav_tab_content(
    side_nav_tab_id = "about",
    tags$h1("About")
  )
)

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

  callModule(chartSettings, "main")

}

# Server modules
chartSettings <- function(input, output, session) {

  ## 'Home' tab -- Sidebar
  output$selectRootSymbol <- renderUI({
    .choices <- c('a','b','c')  
    tagList(
      helpText("Root Symbol:"),  # Note: helpText() looks a little cleaner versus using the 'label' parameter in selectInput() below
      # selectInput(session$ns("reactiveRootSymbol"), label = NULL, choices = .choices, selected = NULL, width = '100%')
      material_dropdown(session$ns("reactiveRootSymbol"), label = NULL, choices = .choices, selected = NULL, width = '100%')
    )
  })

  output$selectSymbol <- renderUI({
    req(input$reactiveRootSymbol)
    .choices <- c('d', 'e', 'f') 
    tagList(
      helpText("Symbol:"),
      # selectInput(session$ns("reactiveSymbol"), label = NULL, choices = toupper(.choices), selected = NULL, width = '100%')
      material_dropdown(session$ns("reactiveSymbol"), label = NULL, choices = toupper(.choices), selected = NULL, width = '100%')
    )
  })

}

sidebarCharts <- function(id) {
  ns <- NS(id)
  tagList(
    uiOutput(ns("selectRootSymbol")),
    uiOutput(ns("selectSymbol")),
    # actionButton(ns("settings"), "Settings", icon = icon("cogs"), width = '100%', class = "btn btn-primary"),p()
    material_button(ns("settings"), "Settings", icon = "settings")
  )
}

shinyApp(ui = ui, server = server)

Я думаю, что у меня проблема с пространством имен, но я не уверен (так как кнопка появляется во вложенном модуле). Что я делаю не так?

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 28 сентября 2018

Здесь есть как минимум две проблемы.

1.Material_dropdown не отображается (разрешено)

Это происходит из-за неиспользованной опции width = 100% внутри material_dropdown().Удаление этого приводит к отображению некоторых раскрывающихся списков и отображению всех меток.

2.Последовательный материал_падающий не отображает (неразрешенный)

При наличии двух последовательных material_dropdown результатов отображается только первое раскрывающееся меню, даже если отображаются обе метки.В пакете shinymaterial были предыдущие ошибки с material_dropdown, так что это может быть частью связанной проблемы.

Вот код, следующий за моим исследованием:

library(shiny)
library(shinymaterial)

# submodule UI
sidebarCharts <- function(id) {
  ns <- NS(id)
  tagList(
    uiOutput(ns("selectRootSymbol")),
    uiOutput(ns("selectSymbol")),
    # actionButton(ns("settings"), "Settings", icon = icon("cogs"), width = '100%', class = "btn btn-primary"),p()
    material_button(ns("settings"), "Settings", icon = "settings")
  )
}

# submodule server
chartSettings <- function(input, output, session) {

  ## 'Home' tab -- Sidebar
  output$selectRootSymbol <- renderUI({
    .choices <- c('a','b','c')
    material_dropdown(session$ns("reactiveRootSymbol"), label = "Root Symbol:", choices = .choices)
  })

  output$selectSymbol <- renderUI({
    # req(input$reactiveRootSymbol)
    .choices <- c('d', 'e', 'f')
    material_dropdown(session$ns("reactiveSymbol"), label = "Symbol:", choices = .choices)
  })

}


## Wrap shinymaterial apps in material_page ----
ui <- material_page(
  title = "App Title",
  nav_bar_fixed = FALSE,
  nav_bar_color = "black",
  background_color = "white",
  # font_color = "black",

  # Place side-nav in the beginning of the UI
  material_side_nav(
    fixed = FALSE,
    # Place side-nav tabs within side-nav
    material_side_nav_tabs(
      side_nav_tabs = c(
        "Home" = "home"
      ),
      icons = c("home")
    ),
    background_color = "white"
  ),

  # Define side-nav tab content
  material_side_nav_tab_content(
    side_nav_tab_id = "home",

    material_row(
      material_column(
        material_card(title = NULL,
                      sidebarCharts("main"),
                      depth = NULL),
        width = 2,
        offset = 0
      ),
      material_column(
        material_card(title = NULL,
                      "Chart goes here",
                      depth = NULL),
        width = 10,
        offset = 0
      )
    )
  )
)

## main server ----
server <- function(input, output, session) {
  callModule(chartSettings, "main")
}

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