【问题标题】:Handsontable: how to prevent the table from refreshing when a value changesHandsontable:如何防止表在值更改时刷新
【发布时间】:2016-10-21 00:28:12
【问题描述】:

第一次在 StackOverflow 上发帖,尽管几年来我一直在这里找到很棒的技巧。希望能用handsontable解决一个棘手的问题。

我有一个应用程序,它提供了一个带有几列的可操作实例,其内容/格式取决于另一列中单元格中的值。我通过数据库查询和服务器端处理的方式确定依赖单元格的内容和格式,其结果被发送回handsontable以在afterChange函数中进行处理。

我的问题是,每当用户更新表格中的一个单元格时,所有单元格都会闪烁,而代码会费力地重新考虑表格中所有单元格的格式。首选行为是仅更新格式已更改的单元格,即取决于第一个单元格中更改的值的那个小集。无论如何,只有这些依赖单元格的内容会被更改。为什么要重绘整个表格??

我在这里和其他地方进行了搜索和搜索,我能找到的最接近答案的是,这是该表的预期行为。我不同意...当表格大于 10 行时,更新过程会非常缓慢并且会分散用户的注意力。

有什么建议吗?我愿意直接编辑可动手操作的 js 代码,但如果可能的话,我更愿意翻转一些我不知道的标志。

谢谢大家!

【问题讨论】:

    标签: handsontable


    【解决方案1】:

    afterChange 只会为您刚刚更新的单元格触发一次 (documentation example)。
    您的问题可能来自 afterChange “连锁反应”。第一个 afterChange 修改一个或多个相关单元格,触发其他 afterChange 等等。如果这是问题所在,您可以在源参数上放置一个过滤器。

    另一种解决方案可能是使用数据副本进行更新(请参阅data binding),一旦一切正常,使用loadData 将其重新注入表中,并忽略afterChange 回调。

    最后,如果您仍然有一些性能问题,您可以检查performance tips,并删除任何可能减慢您的表的选项 (example with columnSorting)

    (抱歉,我无法使用 cmets 准确识别您的问题来自何处……)

    【讨论】:

    • 您好 Nicolas,感谢您的想法。我认为这可能是第一种情况,尽管代码似乎系统地重新格式化(重新绘制)每个单元格,即使是那些格式/内容不受用户更改影响的单元格。
    • 您可以创建一个 jsfiddle 让人们查看您的代码,这样您可能会获得更准确的帮助。
    • 您好 Nicolas,感谢您的有用建议。我使用了源参数过滤器,但这并没有真正解决问题。真正的问题是我一直在通过从 ajax 调用中提取信息来设置依赖于已更改单元格的值的单元格格式。依赖单元的数量很大,所以需要很长时间才能更新……这点很明显。我已经通过重写可操作代码与服务器交互的方式解决了这个问题。
    • 太好了,您找到了问题和解决方案。另一种解决方法是修复列宽 (doc)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多