首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在闪亮中使用jqui_sortable时不返回insertUI的顺序

在闪亮中使用jqui_sortable时不返回insertUI的顺序
EN

Stack Overflow用户
提问于 2021-12-20 17:30:28
回答 1查看 71关注 0票数 0

我发现了一个相关的问题:dragUI not draggable when created with insertUI shiny

我希望在jqui_sortable()中插入任意数量的ui元素,并在服务器函数中获得可用元素的顺序。

如果事先知道需要多少个元素,就可以在jqui_sortable()中调用insertUI函数,然后访问服务器中元素的顺序:

代码语言:javascript
复制
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中,并且只插入元素,则不会打印顺序。下面是一个可重复的例子:

代码语言:javascript
复制
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}包使我稍微靠近一些。但是,元素的顺序在插入新元素时不会更新,只有在通过移动元素来更新顺序时才会更新。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 15:30:53

好像是这样工作的。我们的想法是摧毁那些可分类的东西并重新启用它。

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70425744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档