首页 > 解决方案 > R Shiny:动态创建的 bucket_lists 的自定义样式

问题描述

我创建了一个函数,它可以根据先前的输入动态创建多个桶列表,而无需手动创建每个add_rank_list.

但是,我无法设置它的样式,就像非动态创建存储桶列表一样。

下面的示例演示了这一点。

它使用 HTML 标记进行样式设置。class = c("default-sortable", "custom-sortable")然后作为选项包含在bucket_list. 但是,我无法在动态创建的 bucket_lists 代码中正确放置此代码。

library(shiny)
library(sortable)

ui <- fluidPage(
  tags$style(
    HTML("
                                                      .rank-list-container.custom-sortable {
                                                       border-color:#FFFFFF;
                                                      }
                                                      .custom-sortable .rank-list-item {
                                                      border-color:#FFFFFF;
                                                      }
                                                      ")),
   uiOutput("bucket_1_and_2"),
  
 fluidRow( column(6,uiOutput("bucket_1")),column(6,
  uiOutput("bucket_2")))
  
)

server <- function(input, output, session) {
  
  bucket_1 <- reactive({lapply(c("Default","Styling"), function(x) {
    add_rank_list(
      text = "",
      input_id = paste0("bucket_1_",x),
      labels =  x
    )
  })
  })
  output$bucket_1_and_2 <- renderUI({
    do.call("bucket_list", args = c(
      header = "",
      group_name = "bucket_sort",
      orientation = "horizontal",
      # The following code does not function:
      # class = c("default-sortable", "custom-sortable"),
      bucket_1()
    ))
  })
  
  
  output$bucket_1 <- renderUI({
    bucket_list(
      header = "",
      group_name = "bucket_sort",
      orientation = "horizontal",
      class = c("default-sortable", "custom-sortable"),
      add_rank_list(
        text = "",
        input_id = "bucket_1",
        labels = "Custom"
      ))
  }
  )
  output$bucket_2 <- renderUI({
    bucket_list(
      header = "",
      group_name = "bucket_sort",
      orientation = "horizontal",
      class = c("default-sortable", "custom-sortable"),
      add_rank_list(
        text = "",
        input_id = "bucket_2",
        labels = "Styling"
      ))
  }
  )
  
}

shinyApp(ui, server)

非常感谢帮助。

标签: rshiny

解决方案


我从未使用过bucked_list,所以我不确定,但也许你想要:

output$bucket_1_and_2 <- renderUI({
  bucketLists <- lapply(bucket_1(), function(x){
    bucket_list(
      header = "",
      group_name = "bucket_sort",
      orientation = "horizontal",
      class = c("default-sortable", "custom-sortable"),
      x
    )
  })
  do.call(tagList, buckedLists)
})

推荐阅读