Derrick.Jiao 发表于 2022-8-16 10:05:54

[表格编辑器]实现提示保存功能

本帖最后由 Derrick.Jiao 于 2022-8-16 10:08 编辑

有朋友在看了 自定制编辑器——加载模板功能 这篇文章之后,也实现了加载模板的功能,但是似乎还少了一步。少了什么呢?就是当我们更改完原来的表单之后,这个内容可能是需要保存的。上面的示例中,点击加载模板之后就是调用fromJSON了,就没有提示是否需要保存。那这篇文章就来教大家如何实现这个提示保存框。
首先我们先了解一下这两个弹窗的本质是什么。像这个就是一个警告框,也就是一个MessageBox。想要调用这样一个MessageBox,可以通过showMessageBox实现。


这是api
https://demo.grapecity.com.cn/sp ... tml#.showMessageBox
他的传参分别是MessageBox的主体文本、标题、图标、成功回调、失败回调、以及下方的按钮类型。


那下面这个是一个Template,本质和单元格格式弹窗类似,只不过更加简单一些。想要唤起Template,就需要用到接口showDialog。



这是api,具体参数和demo,下面链接都有描述
https://demo.grapecity.com.cn/sp ... er.html#.showDialog

前面 关闭编辑器保存提示弹窗 这篇文章中提到 isFileModified 这个data,我们要实现判断是否修改,也依赖这个data。
当我们判断到表单被修改之后,才会唤起保存弹窗,否则就是直接fromJSON。注意:成功唤起之后,需要将这个data重新置为false。
if(context.getData("isFileModified")){
                        A(B,C);
                        context.setData("isFileModified", false);
                  }else{
                        var spread = context.getWorkbook();
                        spread.fromJSON(json1)
                  }唤起MessageBox的操作就是在这个function A里调用showMessageBox方法,前面两个参数,可以自己传想要的字符串进去,或者直接用我们设计器的resources。
在成功的回调函数function B中做了一个switch case,点击是的时候,就唤起保存文件的Template。这里加了一个下载逻辑,可以不用直接下载,后续可以把这个json传给后端保存都是可以的。
function A(callback1,callback2) {
                        GC.Spread.Sheets.Designer.showMessageBox(resources.closingNotification,resources.title, GC.Spread.Sheets.Designer.MessageBoxIcon.warning,callback1,callback2,2);
                  }
                        //定义回调函数
                  function B(result) {
                        switch (result) {
                            case 2 /* yes */
                              :
                              var dialogOption = {
                                    text: "",
                              };
                              GC.Spread.Sheets.Designer.showDialog("setText", dialogOption, (result) => {
                                    if (!result) {
                                        return;
                                    }
                                    var text = result.text;
                                    var spread = context.getWorkbook();
                                    var testJson = JSON.stringify(spread.toJSON())
                                    console.log(testJson)
                                    funDownload(testJson, text + ".ssjson");
                  
                              }, (error) => {
                                    console.error(error);
                              }, checkResult);
                              break;
                            case 3 /* no */
                              :
                              var spread = context.getWorkbook();
                              spread.fromJSON(json1)
                              break;
                            case 4 /* cancel */
                              :
                              return;
                        }
                        
                  }
                  function C() {
                        console.log('我是回调函数2') //模仿耗时操作
                  }
那这个template是怎么定义的呢?参考前面定义Template的文章 创建弹出框(Dialog) ,还有一个更直接的办法就是通过getTemplate方法去获取我们的内置的Template结构,直接去参考。
var setTextTemplate = {
                "templateName": "saveFileDialogTemplate",
                "title": "保存文件",
                "content": [
                  {
                        "type": "FlexContainer",
                        "children": [
                            {
                              "type": "TextBlock",
                              "margin": "0 0 0 10px",
                              "text": "文件名:"
                            },
                            {
                              "type": "ColumnSet",
                              "margin": "10px",
                              "children": [
                                    {
                                        "type": "Column",
                                        "children": [
                                          {
                                                "type": "TextEditor",
                                                "bindingPath": "text",
                                                "margin": "2px 2px 0 0",
                              
                                          }
                                        ],
                                        "width": "110px"
                                    },
                                    {
                                        "type": "Column",
                                        "children": [
                                          {
                                                "type": "TextBlock",
                                                "margin": "6px 2px 0 0",
                                                "text": ".ssjson"
                                          }
                                        ]
                                    },
                                    {
                                        "type": "Column",
                                        "children": [
                                          {
                                                "type": "TextBlock",
                                                "bindingPath": "extName",
                                                "style": "line-height:30px"
                                          }
                                        ],
                                        "width": "auto"
                                    }
                              ]
                            }
                        ]
                  }
                ]
            }
记得,别忘记注册templateGC.Spread.Sheets.Designer.registerTemplate("setText", setTextTemplate);
以上就是实现这个功能的主要思路,demo怎么使用呢?可以分别试一下两个情况:1、直接点“加载模板”按钮;2、在任意单元格输入值后,再点“加载模板”按钮。

页: [1]
查看完整版本: [表格编辑器]实现提示保存功能