我想根据一个值对整个行应用颜色突出显示,并保留rhandsontable的复选框功能。在下面的简单示例中,我希望第3行为粉红色,第4行为绿色。

library(rhandsontable)

DF = data.frame( bool = TRUE,val = 1:10, big = LETTERS[1:10],
                small = letters[1:10],
                stringsAsFactors = FALSE)

###Checkboxes not Present/Entire row not highlighted
rhandsontable(DF, readOnly = FALSE, width = 750, height = 300) %>%
  hot_cols(renderer = "
           function (instance, td, row, col, prop, value, cellProperties) {
           Handsontable.renderers.NumericRenderer.apply(this, arguments);
            if (value == 'C') {
           td.style.background = 'pink';
           } else if (value == 'D') {
           td.style.background = 'green';
           }
           }")

####Checkboxes Present
rhandsontable(DF, readOnly = FALSE, width = 750, height = 300)

最佳答案

问题是您使用了NumericRenderer,它试图将应用的列转换为数值。我的解决方案可能不是最佳解决方案,但确实可以完成。

library(rhandsontable)

DF = data.frame( bool = TRUE,val = 1:10, big = LETTERS[1:10],
                 small = letters[1:10],
                 stringsAsFactors = FALSE)

# Text Renderer
text_renderer <- "
  function (instance, td, row, col, prop, value, cellProperties) {
    Handsontable.renderers.TextRenderer.apply(this, arguments);
    # This is the column which you want to check for coloring
    var col_value = instance.getData()[row][2]
    if (col_value == 'C') {
      td.style.background = 'pink';
    } else if (col_value == 'D') {
      td.style.background = 'green';
    }
  }"

# Renderer for the bool column
bool_renderer <- "
  function (instance, td, row, col, prop, value, cellProperties) {
    Handsontable.renderers.CheckboxRenderer.apply(this, arguments);
    var col_value = instance.getData()[row][2]
    if (col_value == 'C') {
      td.style.background = 'pink';
    } else if (col_value == 'D') {
      td.style.background = 'green';
    }
  }
"
# Entire row highlighted and checkbox attribute preserved
rhandsontable(DF, readOnly = FALSE, width = 750, height = 300) %>%
  hot_col(col = c(2, 3, 4), renderer = text_renderer) %>%
  hot_col("bool", renderer = bool_renderer)


诀窍是创建两个渲染器:


专为您的bool列使用的CheckboxRenderer
其余列的TextRenderer。


instance.getData()[row][2]检索行索引row处的大列的值。因此,渲染器针对每一行检查if语句中的条件是否为TRUE。

干杯

关于javascript - Rhandsontable条件格式-如何根据特定的属性值突出显示行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44813590/

10-12 12:39