我正在使用shinyjqui包,并且相信下面的代码应该创建可拖放的UI/绘图。但是,在使用Add UI按钮添加2+更多情节之后,返回的对象是不可拖放的。但是,当我使整个输出main_output可拖动时,我可以让它工作,但这不是我想要的。
有什么建议吗?
最起码的例子如下:
library(shinyjqui)
ui <- fluidPage(
fluidRow(
verticalLayout(
uiOutput('main_output')
)
)
)
server <- function(input, output, session) {
output$main_output <- renderUI({
uiOutput('moduel_box')
})
render_moduels <- reactiveValues(input_types = NULL)
observeEvent(input$add, {
plot_type <- as.character(input$select)
input_types <- render_moduels$input_types
render_types <- unique(c(input_types, plot_type))
render_moduels$input_types <- render_types
output_types <<- c(render_moduels$input_types, 'moduel_box')
output$main_output <- renderUI({
lapply(output_types, uiOutput)
})
jqui_draggabled(paste0('#', output_types, sep=',', collapse = ''))
})
# jqui_draggable('#main_output') #This works though?
output$moduel_box <- renderUI({
box(width = '100%',
actionButton("add", "Add UI"),
selectInput('select', 'please select', choices = c('histogram', 'line_plot'))
)
})
output$histogram <- renderUI({
box(
renderPlot(hist(iris$Sepal.Length,30)),
actionButton('rmv', 'remove')
)
})
output$line_plot <- renderUI({
box(
renderPlot(plot(iris$Sepal.Length, type='l')),
actionButton('rmv', 'remove')
)
})
}
shinyApp(ui, server)发布于 2018-07-08 11:16:46
多个元素的选择器应该是"#id1,#id2"格式,而不是"#id1,#id2,"格式,因此jqui_draggabled的表达式应该改为jqui_draggabled(paste0('#', output_types, sep='', collapse = ','))。
为了使动态UI的逻辑更加清晰,我建议在这里使用shiny::insertUI:
observeEvent(input$add, {
plot_type <- as.character(input$select)
input_types <- render_moduels$input_types
if (plot_type %in% input_types) return()
render_moduels$input_types <- c(input_types, plot_type)
insertUI(
selector = "#moduel_box",
where = "beforeBegin",
ui = jqui_draggabled(uiOutput(plot_type))
)
})而且,顺便说一句,box函数来自shinydashboard包,您应该在开始时加载它。
https://stackoverflow.com/questions/50889278
复制相似问题