我正在努力将自动数字输入嵌入到闪亮的应用程序的 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 几乎一无所知,而且我不知道如何正确地做到这一点。谁能帮我解决这个问题吗?
现在可以了,我的同事发现了。有两件事缺失/错误:
以下代码有效:
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)