Shiny DT 表中的 AutoNumeric.js (ShinyWidgets)

问题描述 投票:0回答:1

我正在努力将自动数字输入嵌入到闪亮的应用程序的 DT 表中。我偶然发现了this帖子,这让我的事情变得更加清晰了。

但是,我无法使其适用于自动数字输入。

这是我到目前为止所拥有的:

library(shiny)
library(DT)
library(shinyWidgets)

ui <- 
  tagList(
    DTOutput("dtable")
  ) 

server <- function(input, output){
  
  output$dtable <- 
    renderDT(
      {
        
        dat <- data.frame(
          select = c(
            as.character(
              autonumericInput(
                inputId = 'id_1',
                label = "Default Input 1",
                value = 1.34
              )
            )
          )
        )
        
        js <- c(
          "function(settings){",
          "  $('[id^=id_1]').autoNumeric({",
          "    minimumValue: 1,",
          "    maximumValue: 2,",
          "  });",
          "}"
        )
        
        datatable(
          dat,
          rownames = FALSE,
          escape = FALSE,
          options = list(
            initComplete = JS(js),
            preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
            drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); }')
          )
        )
      }
    )
  
}

shinyApp(ui, server)

我认为问题可能是js-snippet不正确并且对象的初始化无法正常工作。然而,我对 JS 几乎一无所知,而且我不知道如何正确地做到这一点。谁能帮我解决这个问题吗?

javascript r shiny dt shinywidgets
1个回答
0
投票

现在可以了,我的同事发现了。有两件事缺失/错误:

  1. 对象的初始化可以在drawCallback JS函数中完成
  2. 必须添加各自的html依赖项

以下代码有效:

library(shiny)
library(DT)
library(shinyWidgets)

ui <- 
  tagList(
    DTOutput("dtable")
  ) 

server <- function(input, output){
  
  output$dtable <- 
    renderDT(
      {
        
        dat <- data.frame(
          select = c(
            as.character(
              autonumericInput(
                inputId = 'id_1',
                label = "Default Input 1",
                value = 1.34,
                maximumValue = 1.99,
                minimumValue = 1.00,
                currencySymbol = " €",
                currencySymbolPlacement = "s"
              )
            )
          )
        )
        
        
        dat2 <- 
          datatable(
          dat,
          rownames = FALSE,
          escape = FALSE,
          options = list(
            preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
            drawCallback = JS('function() {Shiny.initializeInputs(this.api().table().node()); Shiny.bindAll(this.api().table().node()); }')
          )
        )
        
        dep2 <- htmltools::htmlDependency(
          "shinyWidgets", "0.8.2",
          src = "packer",
          script = "autonumeric.js",
          package = "shinyWidgets")
        dat2$dependencies <- c(dat2$dependencies, list(dep2))
        dat2
        
      }
    )
  
}

shinyApp(ui, server)
© www.soinside.com 2019 - 2024. All rights reserved.