Как указать строки / столбцы для применения функций обратного вызова R Shiny? - PullRequest
0 голосов
/ 06 февраля 2019

Я хотел бы указать столбцы / строки, к которым я хочу применить свою функцию обратного вызова (Короче говоря, я пытаюсь добавить всплывающую подсказку только для определенных ячеек в моем Datatable).Вот часть кода, в которой я пытаюсь решить эту проблему:

output[[(paste("table_", name, sep=""))]] <- DT::renderDataTable({
  DT::datatable(content[[name]]$data,
  container = sketch,
  rownames = FALSE,
  filter = "top",
  options = list(
    columnDefs = list(list(
      targets = rules_indexes[[name]]-1, #I would like to specify this for the callback below
      render = JS(
        "function(data, type, row, meta) {",
        "return type === 'display' && ",
        "'<span title=\"' + 'span' + '\">' + data +'</span>';",
        "}") #this approach doesn't work when the elements have no content (nothing to hover)
    ))

),
callback = JS("
      table.on('mouseenter', 'tbody td', function() {
        var column = $(this).index();
        var row = $(this).parent().index();
        if ( row==0){
        this.setAttribute('title', 'callback');}

      });

      return table;
      ") #this approach works but I don't know how to specify the rows/columns to apply this callback to.
)%>% 
    formatStyle(columns = rules_indexes[[name]],backgroundColor = styleEqual("","crimson"))
})

}

1 Ответ

0 голосов
/ 07 февраля 2019

Я пытаюсь добавить всплывающую подсказку только для определенных ячеек в моем Datatable

Вы можете сделать так:

library(DT)

# we will place a tooltip at cell(1,1) and at cell(3,2)
rows <- "[1,3]"
cols <- "[1,2]"
tooltips <- "['foo','bar']"

datatable(head(iris), 
          options=list(initComplete = JS(c(
            "function(settings){",
            sprintf("  var rows = %s;", rows),
            sprintf("  var cols = %s;", cols),
            sprintf("  var tooltips = %s;", tooltips),
            "  var table = settings.oInstance.api();",
            "  for(var i=0; i<rows.length; i++){",
            "    var cell = table.cell(rows[i],cols[i]);",
            "    cell.node().setAttribute('title', tooltips[i]);",
            "  }",
            "}")))
)

enter image description here

...