闪亮的数据表回调

4

我对JavaScript有一定的陌生,所以在使用DataTables回调选项中的函数时遇到了问题。

在这个小例子中,我想编写一个JavaScript函数,使得当用户选择mtcars数据表中的一行时,如果MPG的值大于20,则会弹出一个提示框,显示“Good for you!”。这类似于这个例子,但该示例没有使用shiny。以下是我的尝试:

library(shiny)
library(DT)
server <- function(input, output) {
    output$one <- DT::renderDataTable(mtcars,options=list(callback=DT::JS(
      'function(table) {
      table.on("click.dt","tr", function() {
      var data=table.row(this).data();
      if (parseFloat(data[0]>20.0))      
        alert("Good for you!");
      });}'    
      )))
}

ui <- fluidPage(mainPanel(DT::dataTableOutput("one")))
shinyApp(ui = ui, server = server) 

选择MPG大于20的行并不会产生我想要的警报。我觉得我可能从根本上误解了回调选项中javascript的工作原理。任何帮助将不胜感激。

谢谢

1个回答

5

renderDataTablecallback参数中,只需使用callback函数的主要代码(无需使用options):

    server <- function(input, output) {
        output$one <- DT::renderDataTable(mtcars,callback=JS(
                'table.on("click.dt","tr", function() {
                var data=table.row(this).data();
                if (parseFloat(data[1])>20.0)      
                 alert("Good for you!");
})'    
      ))
}

你的 parseFloat 函数也与整个 if 条件有关,data[0] 是汽车名称,data[1] 则是其每加仑英里数。

你可以使用开发者工具和 console.log 在你的 JavaScript 中打印到控制台来进行故障排除。例如,在你的 if 之前添加一个 console.log(data) 并检查它的样子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接