Lynn.Dou 发表于 2023-11-21 15:07:15

组件版设计器自定制之限制tableName的输入

背景:
在designer中,用户可以通过下图方式修改tableName。

有客户提出这样一个需求:业务中不希望用户将tableName设置为中文,如何限制中文字符的输入呢?

实现方式:
工具栏中tableName输入对应的命令为 'Designer.setTableName',所以可以通过重写execute方法从中加以干预。
var setTableNameFn = spread.commandManager()['Designer.setTableName'].execute;
            spread.commandManager()['Designer.setTableName'].execute = function (context, options, actionType) {
                // do sth
            }
其次,因为需要限制中文字符的输入,所以可以结合正则表达式对用户输入的tableName 字符串做下校验。
function hasChinese(str) {
                  return /[\u4e00-\u9fa5]/.test(str);
                }最后,判断如果包含中文字符,则弹出错误提示对话框;如果不包含,则正常执行原命令逻辑。
完整代码如下:
var setTableNameFn = spread.commandManager()['Designer.setTableName'].execute;
            spread.commandManager()['Designer.setTableName'].execute = function (context, options, actionType) {
                function hasChinese(str) {
                  return /[\u4e00-\u9fa5]/.test(str);
                }
                if (options.newTableName && !hasChinese(options.newTableName)) {
                  return setTableNameFn.apply(this, arguments);
                } else {
                  GC.Spread.Sheets.Designer.showMessageBox("无效表名,请勿输入中文字符", "错误提示", GC.Spread.Sheets.Designer.MessageBoxIcon.error);
                }

            }
来看下实现效果:

完整代码请参考附件demo。
页: [1]
查看完整版本: 组件版设计器自定制之限制tableName的输入