找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2023-10-9 13:52  /   查看:1714  /  回复:0
需求背景:SpreadJS V16之后,推出了全新的结构SJS,进一步压缩文件体积,减小存储传输压力。当用户模板中包含数据绑定时,使用在线表格编辑器(设计器designer)导入导出sjs文件,可以包含文件的绑定树结构。而如果使用spread上的open和save方法。默认并不会包含文件的绑定树信息。而当想要对代码导入的sjs文件再做设计时,往往需要能包含数据绑定树结构。

解决方法:简单的对open和save方法进行补充,即可实现。
1. 保存sjs文件
保存sjs文件,使用的是spread.save方法,在该方法的第三个参数中,添加对当前设计器绑定树结构信息的记录,即可实现在导出的sjs文件包含绑定树结构的目的。具体代码如下:
  1. const saveSjsBind = () => {
  2.   spread.save((sjsFile) => {
  3.     saveAs(sjsFile,'test.sjs')
  4.   },(e)=>{
  5.     console.log(e)
  6.   },{
  7.     customData:JSON.parse(designer.getData('treeNodeFromJson') || designer.getData('updatedTreeNode') || designer.getData('oldTreeNodeFromJson'))
  8.   })
  9. }
复制代码
上述代码中,customeData记录的即为绑定树信息,designer代表的是当前的在线表格编辑器对象,具体的名字根据自己实际项目中的变量名进行修改即可。

2. 加载sjs文件
加载sjs文件,使用的是spread.open()方法,加载完成后,需要在成功的回调方法中,再去将当前文件的绑定树结构渲染到当前的在线表格编辑器(designer)上,详细的代码如下所示:
  1. const openSjsFile = (e) => {
  2. // file表示当前导入的文件对象或blob
  3.   spread.open(file,(fileJson) => {
  4. // 成功回调中,提取文件的customData,再对designer进行设置
  5.     let bindData =JSON.stringify(fileJson.customData)
  6.     if(bindData){
  7.       designer.setData("treeNodeFromJson",bindData)
  8.       designer.setData("oldTreeNodeFromJson",bindData)
  9.     }
  10.   })
  11. }
复制代码
使用上边的导入导出代码,即可实现保存和加载sjs文件时,正常显示绑定树结构的目的。





0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部