在rhandsontable中更改多行的背景颜色

时间:2016-09-28 16:01:12

标签: r rhandsontable

使用

library("rhandsontable")
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>%    
hot_col(c(1,3), 
  renderer = "function(instance, td, row, col, prop, value, cellProperties) {
    Handsontable.TextCell.renderer.apply(this, arguments);
    td.style.background = 'lightblue';
  }"
)

可以为所选列定义背景颜色,此处为第1列和第3列。

是否可以对选定的行执行相同操作?

如果我直接引用行,这是有效的:

library("rhandsontable")
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>%
hot_cols(
  renderer = "function(instance, td, row, col, prop, value, cellProperties) {
    Handsontable.TextCell.renderer.apply(this, arguments);
    if (row==1 || row==3 || row==4) td.style.background = 'lightblue';
  }"
)

但是,我想在一个向量中提供行索引,沿着这些行(这不起作用,大概是因为渲染器函数看不到myindex):

myindex <- c(1, 3, 4)
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>%
hot_cols(
  renderer = "function(instance, td, row, col, prop, value, cellProperties) {
    Handsontable.TextCell.renderer.apply(this, arguments);
    if (row in myindex) td.style.background = 'lightblue';}
  }"
)

1 个答案:

答案 0 :(得分:2)

这可能不是最有效的答案,但它有效: 您可以使用paste() / paste0()将您的r对象添加到javascript代码中,如下所示:

myindex <- c(1, 3, 4)

rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>%
  hot_cols(
    renderer = paste0(
      "
      function(instance, td, row, col, prop, value, cellProperties) {
        Handsontable.TextCell.renderer.apply(this, arguments);
        var row_index = ", paste("[", paste(myindex, collapse = ","), "]"), ";
        for (i = 0; i < row_index.length; i++)
        if (row == row_index[i]) {
          td.style.background = 'lightblue';
        }
      }
      "
    )
  )