【问题标题】:Can you highlight a Handsontable table cell for a fixed duration of time when its value has changed?当值发生变化时,您能否在固定的时间内突出显示 Handsontable 表格单元格?
【发布时间】:2017-08-02 00:18:57
【问题描述】:

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

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

【问题讨论】:

  • 你能详细说明一下吗?最后一句没有多大意义。
  • @ZekeDroid 我在我的问题中添加了更多信息。

标签: handsontable


【解决方案1】:

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

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

逻辑

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

首先创建您的验证回调。在这里,确保在必要时从validatedCells 添加/删除单元格。现在,您的自定义渲染器应该使用此地图根据验证的值将颜色变为绿色/红色。应该是这样的:

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

应该是这样的!

【讨论】:

  • 谢谢。我现在有这个工作。我采用了在数据到达时在数据上设置“突出显示”标志的方法。我使用渲染器来应用着色并设置超时。超时会删除“highlight”标志并强制渲染。
【解决方案2】:

为 afterChange 实现一个处理程序。在 afterChange 处理程序中,您将可以访问实例、行号、列号、旧值和新值。

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

var td = $(hotInstance.getCell(row, column, false);

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

【讨论】:

  • 这实际上不起作用,因为 afterChange 处理程序可能会被渲染器覆盖。但这是一个很好的开始!我建议使用 customRenderer 来进行着色,并使用这个 afterChange 事件进行超时,就像你说的那样
  • 我同意你的看法。拥有样式(或对 td 的任何操作)最好在渲染器中实现。
猜你喜欢
  • 2017-07-29
  • 2018-06-01
  • 2015-11-03
  • 2017-11-11
  • 2014-01-29
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多