当 Handsontable table 单元格的值发生变化时,您能否在固定的时间内突出显示该单元格?

Can you highlight a Handsontable table cell for a fixed duration of time when its value has changed?

我有一个 Handsontable,我正在以编程方式对其进行更改。是否可以突出显示在固定时间段内发生变化的单元格?

编辑:例如对于数字字段,如果新值高于旧值,我希望能够以绿色突出显示一个单元格,而对于相反的情况,则以红色突出显示。然后在短时间后让突出显示消失。

为 afterChange 实施处理程序。在 afterChange 处理程序中,您将有权访问实例、行号、列号、旧值和新值。

您可以使用以下方法获取单元格元素 (td):

var td = $(hotInstance.getCell(行,列,假);

获得 td 后,您可以尝试使用颜色编码进行 setTimeout。

您似乎想要做的是向您的单元格添加一个 customRenderer 并对它们进行一些自定义验证。我建议您仔细阅读这两个主题,因为文档中有大量信息可以帮助您了解如何进行 red/green 渲染。对于定时方面,这是一个简单的 JS 逻辑,可以如下所示:

实际上,您不应该同时拥有数千个这样的解决方案,但即便如此,这个解决方案应该可以正常工作,提高效率。我们要做的是创建一个映射来存储经过验证的单元格。渲染时,只有当单元格在地图中时,您才会检查此地图和颜色。我们将使用 mpusarla 的答案来实现部分行为。

逻辑

var validatedCells = {} 定义为已验证单元格的地图,坐标为键,颜色为值。

首先创建您的验证回调。在这里,确保在必要时 add/remove 来自 validatedCells 的单元格。现在,您的自定义渲染器应该根据验证值使用此映射来着色 green/red。应该是这样的:

var possibleColor = validatedCells[[row,col]];
if (possibleColor) {
    td.style['background-color'] = possibleColor;
}

这足以只做着色。现在对于超时,您应该做的是在您的验证器在 validatedCells 中设置一个单元格后立即创建一个超时以在一段时间后删除该值:

validatedCells[[row,col]] = 'green';
setTimeout(function() {
    delete validatedCells[[row,col]];
}, 1000); // deletes it after 1000 millisecs

应该就是了!