找回密码
 立即注册

QQ登录

只需一步,快速开始

冥冥中明明是你

注册会员

15

主题

62

帖子

179

积分

注册会员

积分
179

[已处理] refresh() undefined

冥冥中明明是你
注册会员   /  发表于:2022-11-16 11:33  /   查看:1853  /  回复:7
50金币
SpreadJS版本:14.2.4

前端框架:vue2
浏览器版本:Chrome 107.0.5304.107
使用场景:拖动改变表单的宽度,改动后调用spread.refresh(),浏览器报错:Uncaught TypeError: Cannot read properties of undefined (reading 'refresh');
测试:在mounted() {}函数内直接调用this.spread.refresh(),也会一样的报错;
请问refresh()弃用了吗?
image.png785099181.png
image.png857488098.png

最佳答案

查看完整内容

这个问题一般框架中才会存在,框架中提供了workbookInitialized回调方法,该方法会在SpreadJS初始化完成之后触发,在方法中可以获取到spread对象 如果是在线表格编辑器,也有对应的designerInitialized回调方法,在方法中可以获取designer对象,然后通过designer.getWorkbook();获取到对应的spread对象

7 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-16 11:33:30
来自 4#
本帖最后由 Clark.Pan 于 2022-11-16 14:48 编辑

这个问题一般框架中才会存在,框架中提供了workbookInitialized回调方法,该方法会在SpreadJS初始化完成之后触发,在方法中可以获取到spread对象
  1. <gc-spread-sheets :hostStyle="spreadHost" @workbookInitialized="initSpread"></gc-spread-sheets>
复制代码
  1. initSpread(spread){
  2.      this.spread = spread;
  3. }
复制代码


如果是在线表格编辑器,也有对应的designerInitialized回调方法,在方法中可以获取designer对象,然后通过designer.getWorkbook();获取到对应的spread对象
  1. <gc-spread-sheets-designer :styleInfo='styleInfo' :config='config' :spreadOptions='spreadOptions' @designerInitialized='designerInitialized'></gc-spread-sheets-designer>
复制代码
  1. designerInitialized(value) {
  2.     this.designer = value;
  3.     designer.getWorkbook();
  4. }
复制代码
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-16 13:52:37
2#
refresh没有被弃用。SpreadJS一般来说会做向下兼容不会轻易的去弃用某个接口造成breakchange。
猜测spread应该没有获取对或者压根没有获取到,您可以在上述出错之前debug输出一下this.spread。估计很可能是一个null或者undefined。
如果这些都是正常的,那么请提供一个能够重现问题的demo,我们深入排查一下。
回复 使用道具 举报
冥冥中明明是你
注册会员   /  发表于:2022-11-16 14:30:22
3#
Clark.Pan 发表于 2022-11-16 13:52
refresh没有被弃用。SpreadJS一般来说会做向下兼容不会轻易的去弃用某个接口造成breakchange。
猜测spread ...

经过排查,发现确实是为null,然后我设置了setTimeout之后,就能正常获取到了。
那这样有没有办法监听到spread绘制完毕的时间点呢?
回复 使用道具 举报
冥冥中明明是你
注册会员   /  发表于:2022-11-16 15:20:18
5#
Clark.Pan 发表于 2022-11-16 14:43
这个问题一般框架中才会存在,框架中提供了workbookInitialized回调方法,该方法会在SpreadJS初始化完成之 ...

好的,问题已解决。但是发现在实际运用中,短时间内大量调用spread.refresh()的话会比较卡(拖动边框改变表单宽度),这个有办法优化吗?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-16 18:15:24
6#
需要针对具体问题进行优化,您这边可以抽时间抽离一份demo上传上来,我们帮您看看如何优化。
回复 使用道具 举报
冥冥中明明是你
注册会员   /  发表于:2022-11-16 19:55:18
7#
Ellia.Duan 发表于 2022-11-16 18:15
需要针对具体问题进行优化,您这边可以抽时间抽离一份demo上传上来,我们帮您看看如何优化。

已经用定时器优化好了,结贴吧,感谢!
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-17 09:19:34
8#
好的,那本贴就结贴啦。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部