handsontable 复杂数据和剪贴板

handsontable Complex data and clipboard

是否可以复制 HOT 数据的渲染版本?

我的情况和数据:

每一行看起来像:

[ number, number, ..., object {simpleValue : number, extraData : data }, number, number, ... ]

行是简单数字和 'extended data' 对象的组合。 'Extended data objects' 由自定义渲染函数渲染为 'simpleValue' 属性 中的数字(工作正常)。还为包含此类调用 DisplayExtData 函数的扩展对象的 TD 注册了一个 onClick 事件。

当我 select 所有显示的数据 (CTRL+A) 并将它们复制到剪贴板 (CTRL+C) 时,第一个问题出现了。我在 'simpleValue' 的文本渲染显示在 table 的地方得到了 [Object Object] 而不是仅包含数字的副本。所以用户不会得到他所看到的呈现的内容,但可能会得到数据的内部表示。

这个问题最简单的解决方案显然是在将对象推入 HoT 之前预处理数据并将对象转换为 'simpleValues'。但我需要(不知何故)一个 link 到原始扩展数据对象,因为我需要在 TD click 上显示这些扩展数据。

(我的第一个解决方案是将对象转换为 JSON,将其保存到隐藏的文本区域中,带有包含 'simpleValue' 属性 和 onClick 事件等的可见标签标记,但此解决方案在主要问题上失败如上所述,因为我在剪贴板复制的文本中得到了 json 和 textarea 标签。)

知道了:

1) 将我的 'Extended Data Object' 的 toString 方法重写为 return 无论我想呈现什么 属性:

ExtData.prototype.toString = function(){return this.value;};

2) 自定义渲染器渲染 value.toString() 并保留对象,因此可以将 onClick 事件添加到 TD,如:

td.onclick = function(){ShowExtData(value);};

(其中值是我的 ExtData 对象)。

从 HoT 复制的文本与显示的文本完全相同,已解决。