Перетаскиваемое свойство исчезает с помощью insertUi()

#r #shiny

#r #блестящий

Вопрос:

Я хотел бы создать перетаскиваемый объект пользовательского интерфейса с помощью insertUI() . Благодаря actionButton() был создан аналогичный объект, и он отлично работает. Однако свойство draggable было удалено.

Я попытался добавить какой-нибудь фрагмент кода, такой как tags$script('$(".draggable").draggable();') ИЛИ tags$script('$(".dragelement").on("dragstart",function(e){e.originalEvent.dataTransfer.setData("Text",e.target.id);});') .

Однако оно больше не работает. У кого-нибудь есть идея?

Следующий пример взят изhttp://shiny.rstudio.com/gallery/absolutely-positioned-panels.html.

 library(shiny)
library(markdown)
### Ui.R
    ui <- fluidPage(
      actionButton("add", "Add UI"),
      absolutePanel(
        bottom = 20, 
        right = 20, 
        width = 300,
        draggable = TRUE,
        wellPanel(
          HTML(
            markdownToHTML(
              fragment.only=TRUE, 
              text=c(
                "This is an absolutePanel that uses `bottom` and `right` attributes.

                    It also has `draggable = TRUE`, so you can drag it to move it around the page.

                    The slight transparency is due to `style = 'opacity: 0.92'`.

                    You can put anything in absolutePanel, including inputs and outputs:"
              )
            )
          ),
          sliderInput("n", "", min=3, max=20, value=5),
          plotOutput("plot2", height="200px")
        )
      )
    )

###Server.R   
    server <- function(input, output, session) {
      observeEvent(input$add, {
        insertUI(
          selector = "#add",
          where = "afterEnd",
          ui =           
            tagList(
              absolutePanel(
                top = 80, 
                right = 20, 
                width = 300,
                draggable = TRUE,
                wellPanel(
                  HTML(
                    markdownToHTML(
                      fragment.only=TRUE, 
                      text=c(
                        "This is an absolutePanel that uses `bottom` and `right` attributes.

                    It also has `draggable = TRUE`, so you can drag it to move it around the page.

                    The slight transparency is due to `style = 'opacity: 0.92'`.

                    You can put anything in absolutePanel, including inputs and outputs:"
                      )
                    )
                  )
                )
              )
            )
        )
      })
    }
  

Ответ №1:

Я нашел решение благодаря jqui_draggable() которые приходят из shinyjqui пакета.

 library(shinyjqui)
server <- function(input, output, session) {
  observeEvent(input$add, {
    insertUI(
      selector = "#add",
      where = "afterEnd",
      ui =  
        jqui_draggable(
        tagList(
          absolutePanel(
            top = 80, 
            right = 20, 
            width = 300,
            draggable = TRUE,
            wellPanel(
              HTML(
                markdownToHTML(
                  fragment.only=TRUE, 
                  text=c(
                    "This is an absolutePanel that uses `bottom` and `right` attributes.

                It also has `draggable = TRUE`, so you can drag it to move it around the page.

                The slight transparency is due to `style = 'opacity: 0.92'`.

                You can put anything in absolutePanel, including inputs and outputs:"
                  )
                )
              )
            )
          )
        )
        )
      )
    })
}