Как использовать блестящий jQi :: orderInput внутри ячейки DT - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь разместить элементы orderInput (из пакета shinyjqui) внутри таблицы DT.Размещение простых вводов, таких как флажки, может быть сделано довольно легко.Поскольку эти входы более сложны, я следовал аналогичному подходу к этому .Хотя входные данные отображаются правильно, их функциональность не работает - и я знаю, что это потому, что их JavaScript не инициализирован должным образом (из-за вызова as.character()).Вот код, который у меня есть:

library(shiny)
library(shinyjqui)

ui <- shinyUI(
  fluidPage(
    h2('Reorder'),
    DT::dataTableOutput('mytable')
  )
)

server = shinyServer(function(input, output, session) {

  data <- head(mtcars)

  # helper function for making inputboxes in a DT
  shinyInput = function(FUN, BrandID, stem, items, id,connect,  ...) { 
    unlist(lapply(seq_len(length(items)), function(x){
      as.character(FUN(inputId=paste(id, stem, BrandID[x], sep="_"), label = NULL, items=items[x],connect[-x], ...))
    }))
  } 

  # datatable with orderinputs
  output$mytable = DT::renderDataTable({
    x <- data.frame(
      sapply(seq(ncol(data)), function(x){
        shinyInput(FUN=shinyjqui::orderInput,
                   BrandID=as.character(rownames(data)), 
                   stem=names(data)[x], 
                   items=as.character(data[,x]),
                   id="OrdImp",
                   connect=paste("OrdImp", names(data)[x], as.character(rownames(data)), sep="_"),
                   as_source=T,
                   width="20%", 
                   item_class='primary')
      })
    )
    names(x) <- names(data)
    rownames(x) <- rownames(data)

    data.frame(x)
  }, escape = FALSE, options = list( 
    preDrawCallback = JS('function() {Shiny.unbindAll(this.api().table().node());}'), 
    drawCallback = JS('function() {Shiny.bindAll(this.api().table().node());} ') 
  ))
}
)

shinyApp(ui = ui, server = server)

Вызов as.character() необходим для того, чтобы элементы даже отображались в HTML, но он удаляет метаданные javascript из блестящего тега.Некоторый javascript должен быть запущен для инициализации этих входных данных - подобно этому SO-ответу, который вручную запускает javascript для инициализации selectInputs внутри DT .Мне нужна помощь, чтобы выяснить этот кусочек javascript, который бы помог этой работе.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...