【问题标题】:Shiny - uiOutput and UI layout problemsShiny - uiOutput 和 UI 布局问题
【发布时间】:2015-10-05 08:01:17
【问题描述】:

现在,我将右侧的 UI 封装为一个变量,并且我希望右侧的 UI 根据“已选择的模块”进行更改。这是我现在正在做的事情:

ui <- navbarPage('test',
  tabPanel('Analysis',
    fluidRow(
      ui_core,
      uiOutput('ui_module')
    ) 
  )
)

output$ui_module <- renderUI({
# observeEvent(input$core_module_selection, {
  current_module <- NULL
  if(!is.null(input$core_module_selection) && input$core_module_selection != 'Core') {
    current_module <- rval$module_ui[[match(input$core_module_selection, rval$module_names)]]
    rval$ui_module <<- current_module
  }

  return(rval$ui_module)
})

我正在为 ui_module 变量使用反应值 (rval),该变量包含我要呈现的 UI:

ui_filetrans <-
tabsetPanel(
  tabPanel('File Transfer',
    p("filetrans")
  )
)
register_module("File Transfer", ui_filetrans)

最终应该是这样的:

ui <- navbarPage('Granatum',
  tabPanel('Analysis',
    fluidRow(
      ui_core,
      tabsetPanel(
        tabPanel('File Transfer',
          p("filetrans")
        )
      )
    ) 
  )
)

但是,相反,我得到了这个奇怪的文本(我猜它是 Bootstrap 类之类的),据说来自标签......而不是完整的对象。

我做错了什么?将对象分配给向量后,对象的类型是否会发生变化?

【问题讨论】:

    标签: r user-interface shiny reactive-programming


    【解决方案1】:

    事实证明,通过将 Shiny UI 元素传递给向量,您将隐式删除对象的一些信息。

    解决办法是用列表,用双方括号来索引:

    rval$module_ui <- list(ui_core)
    
    rval$module_ui <- c(rval$module_ui, list(module))
    

    c(),concatenate 函数,对列表的工作方式非常相似,但请确保在连接之前将“原子”或原子组件转换为列表。

    【讨论】:

    • 我认为shiny::tagList 是专门用于标签列表的,也许可以使用它
    猜你喜欢
    • 2019-08-12
    • 2018-06-20
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多