找回密码
 立即注册

QQ登录

只需一步,快速开始

囡囡~

金牌服务用户

34

主题

110

帖子

340

积分

金牌服务用户

积分
340
囡囡~
金牌服务用户   /  发表于:2024-7-30 11:30  /   查看:1251  /  回复:4
1金币

这是报错的截图,显示Uncaught RangeError: Maximum call stack size exceeded
5d370070f20e824e47dc7a78b12520c.png787757873.png
这是渲染的代码,代码上只有json注入,然后增量加载,代码上可以排除我们内部本身就没有循环引用,我们这边基于纯SpreadJS使用的,没有用现在编辑器
be8fd5fd78c693a18ec7c37e8ccfc27.png46405943.png

spreadJ.zip

1.99 MB, 下载次数: 187

最佳答案

查看完整内容

您好,不建议将复杂的spreadjs对象封装在vue中,如代码中的 因为作为vue的component, 只要你往component上方一个property,vue就会用proxy把对象包了。这个封装是为了拿到变更后更新view 然后把spread放上面,整个spread实例都被包了。不仅干扰到spread自己内部的数据访问。 而且会引起内存问题。 在vue3中,可以使用markRaw阻止vue对SpreadJS对象的代码, https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid ...

4 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-7-30 11:30:13
来自 4#
本帖最后由 Ellia.Duan 于 2024-8-8 16:17 编辑

您好,不建议将复杂的spreadjs对象封装在vue中,如代码中的
  1. data () {
  2.     return {
  3.       workbook: null, //spreadJs
  4.       statusBar: null,
  5.     }
  6.   },
复制代码


因为作为vue的component, 只要你往component上方一个property,vue就会用proxy把对象包了。这个封装是为了拿到变更后更新view
然后把spread放上面,整个spread实例都被包了。不仅干扰到spread自己内部的数据访问。 而且会引起内存问题。

在vue3中,可以使用markRaw阻止vue对SpreadJS对象的代码,
https://gcdn.grapecity.com.cn/fo ... mp;page=1#pid761627


在vue2中,可以参考下面的代码,在this中定义spread的dom对象,在需要用到的地方var spreadReal = GC.Spread.Sheets.findControl(this.spread);

  1. initSpread(spread) {        
  2.     this.spread = spread.getHost();
  3. },     
  4. addSheet() {
  5.     var sheet = new GC.Spread.Sheets.Worksheet('New Sheet');
  6.     var spreadReal = GC.Spread.Sheets.findControl(this.spread);
  7.     spreadReal.addSheet(1,sheet);
  8. }
复制代码



回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-30 14:30:35
2#
您好!根据您提供的ssjson文件,发现其中存在循环引用,如下图所示:
1722320556683.png881597595.png
请您提供一个能够复现问题的demo。
回复 使用道具 举报
囡囡~
金牌服务用户   /  发表于:2024-8-7 17:04:59
3#
本帖最后由 囡囡~ 于 2024-8-7 18:20 编辑

1、npm install
2、npm run dev
3、localhost:8080
执行这三步就可以看到报错

image.png833710937.png

demo.zip

4.62 MB, 下载次数: 169

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-29 18:44:50
5#
您好!由于您长时间未回贴,且从跟帖信息了解到您的问题已得到了有效的解决方案,那就结帖了。如有问题,欢迎继续发帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部