找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-21 15:07  /   查看:1574  /  回复:0
背景:
在designer中,用户可以通过下图方式修改tableName。
image.png115350646.png
有客户提出这样一个需求:业务中不希望用户将tableName设置为中文,如何限制中文字符的输入呢?

实现方式:
工具栏中tableName输入对应的命令为 'Designer.setTableName',所以可以通过重写execute方法从中加以干预。
  1. var setTableNameFn = spread.commandManager()['Designer.setTableName'].execute;
  2.             spread.commandManager()['Designer.setTableName'].execute = function (context, options, actionType) {
  3.                 // do sth
  4.             }
复制代码

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

  11.             }
复制代码

来看下实现效果:
tableName.gif266835631.png
完整代码请参考附件demo。

tableName.html

4.27 KB, 下载次数: 96

0 个回复

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