我正在尝试在 Shiny 应用程序中从可排序库中添加一个 rank_list。如果输入位于 UI 的流动页面部分,这似乎工作正常。当我将它添加到 shinyalert() 或模式时,输入显示在弹出窗口中,但选择不可排序甚至不可选择。
在下面的 repex 中,我添加了一个 selectInput 以查看它是否正确地以交互方式呈现 - 它确实如此。
library(shiny)
library(sortable)
library(shinyalert)
labels <- list(
"one",
"two",
"three",
htmltools::tags$div(htmltools::em("Complex"), " html tag without a name"),
"five" = htmltools::tags$div(htmltools::em("Complex"), " html tag with name: 'five'")
)
rank_list_multi <- rank_list(
text = "You can select multiple items, then drag as a group",
labels = labels,
input_id = "rank_list_multi",
options = sortable_options(multiDrag = TRUE)
)
ui <- fluidPage(rank_list_multi,
actionButton("showAlert", "Show in popup"))
server <- function(input, output, session) {
observeEvent(input$showAlert, {
print("Show popup")
shinyalert(
title = "Reorder this object",
html = TRUE,
closeOnClickOutside = TRUE,
showConfirmButton = TRUE,
text = tagList(
rank_list_multi,
br(),
selectInput("alertTextInput", "Select Letter", choices = c("a", "b", "C"))
)
)
})
}
shinyApp(ui, server)
主页上的可排序工作:
可排序在弹出模式中不起作用:
我看到这个链接问了同样的问题,但不是为了闪亮的包裹可分类 任何帮助表示赞赏
这里的问题是您试图在两个位置使用相同的 UI 对象:
rank_list_multi
出现在主fluidPage
和 shinyalert
中。
您应该创建两个单独的可排序对象,每个对象都有一个独特的
input_id
。您可以使用我在下面构造的生成器函数来执行此操作。
library(shiny)
library(sortable)
library(shinyalert)
#' Construct a sortable rank list object.
#'
#' @param input_id The shiny ID used to construct the rank list.
construct_rank_list <- function(input_id) {
sortable::rank_list(
text = "Drag to Reorder",
labels = c(1:5),
input_id = input_id,
options = sortable_options(multiDrag = TRUE)
)
}
ui <- fluidPage(construct_rank_list("rank_list_multi"),
actionButton("showAlert", "Show in popup"))
server <- function(input, output, session) {
observeEvent(input$showAlert, {
shinyalert::shinyalert(
title = "Reorder this object",
html = TRUE,
closeOnClickOutside = TRUE,
showConfirmButton = TRUE,
text = tagList(
construct_rank_list("rank_list_modal")
)
)
})
}
shinyApp(ui, server)