我发现了一个相关的问题:dragUI not draggable when created with insertUI shiny
我希望在jqui_sortable()中插入任意数量的ui元素,并在服务器函数中获得可用元素的顺序。
如果事先知道需要多少个元素,就可以在jqui_sortable()中调用insertUI函数,然后访问服务器中元素的顺序:
library(shiny)
ui <- fluidPage(
actionButton("add", "Add"),
div(id = "foo")
)
server <- function(input, output, session) {
observeEvent(input$add, {
insertUI(selector = "#foo",
where = "beforeEnd",
ui = jqui_sortable(tags$ul(
id = paste0('lst', input$add),
tags$li('A'),
tags$li('B'),
tags$li('C')
)))
})
observe({
cat(str(input$lst_order1))
cat(str(input$lst_order2))
})
}
shinyApp(ui, server)如果运行上述应用程序,您将看到插入到控制台的前两个列表的顺序。更改元素的顺序也会打印到控制台。
但是,如果我尝试将jqui_sortable()放在UI中,并且只插入元素,则不会打印顺序。下面是一个可重复的例子:
library(shiny)
library(shinyjqui)
ui <- fluidPage(
actionButton("add", "add"),
jqui_sortable(tags$ul(id = "lst")),
)
server <- function(input, output, session) {
observeEvent(input$add, {
insertUI(
selector = "#lst",
where = "beforeEnd",
ui = tags$li(paste0("test", input$add))
)
})
observe({
cat(str(input$lst_order))
})
}
shinyApp(ui, server)如何在任何给定时间创建可排序元素并检索页面上元素的顺序?解决方案不必使用{shinyjqui}。
我在{shinyjqui} GitHub页面上交叉了这个,但我不确定这是不是一个bug。
更新:
{sortable}包使我稍微靠近一些。但是,元素的顺序在插入新元素时不会更新,只有在通过移动元素来更新顺序时才会更新。
library(shiny)
library(sortable)
ui <- fluidPage(
actionButton("add", "add"),
tags$ul(id = "lst"),
verbatimTextOutput("text"),
sortable_js(css_id = "lst", options = sortable_options(
onSort = sortable_js_capture_input(input_id = "selected"),
onLoad = sortable_js_capture_input(input_id = "selected")
))
)
server <- function(input, output, session) {
observeEvent(input$add, {
insertUI(
selector = "#lst",
where = "beforeEnd",
ui = tags$li(paste0("test", input$add))
)
})
output$text <- renderText({
req(input$selected)
input$selected
})
}
shinyApp(ui, server)发布于 2021-12-21 15:30:53
好像是这样工作的。我们的想法是摧毁那些可分类的东西并重新启用它。
library(shiny)
library(shinyjqui)
ui <- fluidPage(
actionButton("add", "add"),
tags$ul(id = "lst"),
)
server <- function(input, output, session) {
observeEvent(input$add, {
insertUI(
selector = "#lst",
where = "beforeEnd",
ui = tags$li(paste0("test", input$add))
)
jqui_sortable("#lst", operation = "enable")
}, priority = 1)
observeEvent(input$add, {
jqui_sortable("#lst", operation = "destroy")
}, priority = 2)
observe({
cat(str(input$lst_order))
})
}
shinyApp(ui, server)https://stackoverflow.com/questions/70425744
复制相似问题