【发布时间】:2016-12-28 07:19:31
【问题描述】:
我混合了动态创建的输入和通常定义的输入。动态创建的输入就像一个垂直堆叠的大块,其他输入在其周围流动。我如何让它们一起流动?
这重现了问题:
library(shinydashboard)
shinyApp(
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
flowLayout(
uiOutput('input_fields'),
textInput('fielda','Field A',''),
textInput('fieldb','Field B',''),
textInput('fieldc','Field C',''),
textInput('fieldd','Field D','')
)
)
),
server = function(input, output) {
output$input_fields <- renderUI({
lapply(1:4, function(i) {
textInput(paste0('field',i), paste('Field',i),'')
})
})
}
)
当前布局:
想要的布局:
编辑:忽略字段 A、B、C、D 小部件。它们仅用于显示其他项目如何包装,但 uiOutput 项目充当一个块。假设所有输入都是动态的。
我想我应该改用这段代码。它在 lapply 内移动 renderUI 以创建多个通用输出(在运行时变化,最多 10 个),我可以使用同样通用的 uiOutput 语句来引用它们。它甚至不会警告不存在的 5 个输出。不完美,但它会做。可能需要添加一个 observeEvent,因为我认为它本身不会是反应性的。
library(shinydashboard)
shinyApp(
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
wellPanel(
flowLayout(
uiOutput('field1'),
uiOutput('field2'),
uiOutput('field3'),
uiOutput('field4'),
uiOutput('field5'),
uiOutput('field6'),
uiOutput('field7'),
uiOutput('field8'),
uiOutput('field9'),
uiOutput('field10')
)
)
)
),
server = function(input, output) {
lapply(1:5, function(i) {
output[[paste0('field',i)]] <- renderUI({
textInput(paste0('field',i), paste('Field',i),'')
})
})
}
)
【问题讨论】: