我有一个handonstable构造,每个列都有自己的渲染器,具体取决于数据类型(可以是数字,文本或自定义)。我想在用户更改任何这些列的字段时更新单元格的颜色以表示它已被更改。
我的问题是我无法真正设置自定义onUpdate渲染器,因为这会覆盖所有现有的渲染器。有什么想法吗?
答案 0 :(得分:2)
您可以使用getCellMeta
为特定单元格而不是整列设置渲染器:
afterChange: function(changes, source){
if (source !== 'loadData' && source !== 'afterChange') {
changes.forEach(function(cellchanges) {
var row = cellchanges[0];
var col = hot.propToCol(cellchanges[1]);
hot.getCellMeta(row, col).renderer = textHasChangedRenderer;
});
}
}
要记住两件事:
1)您需要一系列“has-changes”渲染器来覆盖默认渲染器和自定义渲染器:
var textHasChangedRenderer = function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
td.style.backgroundColor = '#cbd9e4';
};
var numberHasChangedRenderer = function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.NumericRenderer.apply(this, arguments);
td.style.backgroundColor = '#cbd9e4';
};
var dateHasChangedRenderer = function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.DateRenderer.apply(this, arguments);
td.style.backgroundColor = '#cbd9e4';
};
var customHasChangedRenderer = function(instance, td, row, col, prop, value, cellProperties) {
customRenderer.apply(this, arguments);
td.style.backgroundColor = '#cbd9e4';
};
2)将文本渲染器分配给数字列会破坏格式化,因此您需要以某种方式跟踪初始渲染器到列的分配。