需求背景:SpreadJS V16之后,推出了全新的结构SJS,进一步压缩文件体积,减小存储传输压力。当用户模板中包含数据绑定时,使用在线表格编辑器(设计器designer)导入导出sjs文件,可以包含文件的绑定树结构。而如果使用spread上的open和save方法。默认并不会包含文件的绑定树信息。而当想要对代码导入的sjs文件再做设计时,往往需要能包含数据绑定树结构。
解决方法:简单的对open和save方法进行补充,即可实现。
1. 保存sjs文件
保存sjs文件,使用的是spread.save方法,在该方法的第三个参数中,添加对当前设计器绑定树结构信息的记录,即可实现在导出的sjs文件包含绑定树结构的目的。具体代码如下:
- const saveSjsBind = () => {
- spread.save((sjsFile) => {
- saveAs(sjsFile,'test.sjs')
- },(e)=>{
- console.log(e)
- },{
- customData:JSON.parse(designer.getData('treeNodeFromJson') || designer.getData('updatedTreeNode') || designer.getData('oldTreeNodeFromJson'))
- })
- }
复制代码 上述代码中,customeData记录的即为绑定树信息,designer代表的是当前的在线表格编辑器对象,具体的名字根据自己实际项目中的变量名进行修改即可。
2. 加载sjs文件
加载sjs文件,使用的是spread.open()方法,加载完成后,需要在成功的回调方法中,再去将当前文件的绑定树结构渲染到当前的在线表格编辑器(designer)上,详细的代码如下所示:
- const openSjsFile = (e) => {
- // file表示当前导入的文件对象或blob
- spread.open(file,(fileJson) => {
- // 成功回调中,提取文件的customData,再对designer进行设置
- let bindData =JSON.stringify(fileJson.customData)
- if(bindData){
- designer.setData("treeNodeFromJson",bindData)
- designer.setData("oldTreeNodeFromJson",bindData)
- }
- })
- }
复制代码 使用上边的导入导出代码,即可实现保存和加载sjs文件时,正常显示绑定树结构的目的。
|
|