找回密码
 立即注册

QQ登录

只需一步,快速开始

vic

注册会员

16

主题

50

帖子

138

积分

注册会员

积分
138
vic
注册会员   /  发表于:2021-7-1 09:39  /   查看:2529  /  回复:7

弹窗内代码: 由于公司不给外网测试,我截图代码,大神帮看下

    props:{
        params:{
            type:Object,
            default:()=>{}
        },
        args:{
            type:Array,
            default:()=>[]
        }
    },
    data(){
        return {
            SPREAD:null,
            loading:false,
            domH:'',
            paramStr:''
        }
    },
    watch:{
        params:{
            handler(v){
                this.inits()

            },
            deep:true,
            immediate:true
        }
    },
    mounted(){
        this.SPREAD=this.init('tss').Workbook;
    },
    beforeDestroy(){
        this.SPREAD.destroy();
        this.SPREAD=null;
    },






7 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-1 11:27:41
推荐
vic 发表于 2021-7-1 11:22
我现在改成每次请求之前 都SPREAD.destroy(),然后请求成功重新new Workbook,还是一点用都没有
if(this.S ...

这边已经提交研发修复了,预计在14.1.2中修复。
回复 使用道具 举报
vic
注册会员   /  发表于:2021-7-1 09:41:18
沙发
methods:{
        inits(){
            let _this=this;
            let param=this.params;
            var activeSheetChanged = GC.Spread.Sheets.Events.ActiveSheetChanged;
            if(!param.url) return;
            this.loading=true;
            request({
                url: `${param.url}`,
                method: 'post',
                data: param.data
            }).then(res=>{
                this.loading=false;
                if(!res) return;
                let argsArrs=[];
                let arrObj=res.data;
                let objs={};
                let keyObj=Object.keys(arrObj).filter(k=>!['initDataJson','jsonData','notShow'].includes(k));
                let json=JSON.parse(arrObj.jsonData);
                let initDataJson=arrObj.initDataJson||'';
                let args=arrObj.notShow?arrObj.notShow:[];
                let SPREAD=_this.SPREAD||_this.init('tss').Workbook;
                if(!_this.SPREAD){
                    _this.SPREAD=SPREAD
                }
               
                argsArrs=args.concat(_this.args);

                if(keyObj.length>0){
                    
                    keyObj.forEach(i=>{
                        objs[i]=arrObj[i]
                    })
                    this.$store.dispatch('task/setObj',objs)
                }

                SPREAD.suspendPaint();
                SPREAD.invalidateLayout();
                SPREAD.repaint();
                SPREAD.fromJSON(json);

                SPREAD.options.allowContextMenu = false;
                SPREAD.options.highlightInvalidData=false;
               
                let sheetslen=SPREAD.getSheetCount();

               
                //需要隐藏的sheet
                if(argsArrs.length>0){
                    for(let i=0; i<sheetslen;i++){
                        let name=_this.getSheet(i).sheets.name();
                        argsArrs.includes(name) && SPREAD.sheets[i].visible(false)
                    }
                }

                // 渲染数据源
                if(!!initDataJson){

                    for(let i=0; i<sheetslen;i++){
                        let curSheet=SPREAD.getSheet(i);
                        let name=curSheet.name().replace(/^\d*\.?\d*/,'');
                        let dataJson=JSON.parse(initDataJson);
                        let da=dataJson[name]?dataJson[name]:null;
                        
                        if(!!da){
                            let nDa={[name]:da}
                            let dataSource = new GC.Spread.Sheets.Bindings.CellBindingSource(nDa);
                            curSheet.setDataSource(dataSource);
                        }
                        
                    }
                }
               
                SPREAD.resumePaint();
                _this.$emit('sChange',initDataJson);

                SPREAD.bind(activeSheetChanged, function(e,args) { // spread event
                    _this.$emit('sChange',initDataJson)
                });
            }).catch(err=>{
                this.loading=false;
            })
        },
    }
回复 使用道具 举报
vic
注册会员   /  发表于:2021-7-1 09:49:26
板凳
我们加载的这个文件比较大,有10+sheet,每个sheet里有数据源和函数公式;我尝试使用小点的文件,发现内存增长不明显;请问这个问题要这么解决
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-1 11:07:41
地板
这个问题之前有报了类似的bug,这边已经提交研发修复了,预计在14.1.2中修复。
回复 使用道具 举报
vic
注册会员   /  发表于:2021-7-1 11:22:48
5#
本帖最后由 vic 于 2021-7-1 11:24 编辑

我现在改成每次请求之前 都SPREAD.destroy(),然后请求成功重新new Workbook,还是一点用都没有
if(this.SPREAD){
                this.SPREAD.destroy();
                this.SPREAD=null;
            }
            
            request({
                url: `${param.url}`,
                method: 'post',
                data: param.data
            }).then(res=>{
               
                let SPREAD=_this.SPREAD=new GC.Spread.Sheets.Workbook(document.getElementById('tss'));
我们测试了10+次,浏览器就奔溃了
回复 使用道具 举报
vic
注册会员   /  发表于:2021-7-1 12:12:13
7#
那有什么方案能临时解决这种问题?谢谢
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-1 12:13:42
8#
vic 发表于 2021-7-1 12:12
那有什么方案能临时解决这种问题?谢谢

这个是SpreadJS内部代码的问题,没有临时的解决方案。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部