我混合了动态创建的输入和通常定义的输入。动态创建的输入的行为就像一个大型垂直堆叠块,其他输入围绕其流动。我怎样才能让它们全部流动在一起?
这重现了这个问题:
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),'')
})
})
}
)
Run Code Online (Sandbox Code Playgroud)
当前布局:
所需布局:
编辑:忽略字段 A、B、C、D 小部件。它们仅用于显示其他项目如何换行,但 uiOutput 项目充当一个块。假设所有输入都是动态的。
我想我应该使用这段代码。它将 renderUI 移动到 lapply 内以创建多个通用输出(在运行时变化,最多 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')
)
) …Run Code Online (Sandbox Code Playgroud)