找回密码
 立即注册

QQ登录

只需一步,快速开始

panqz

初级会员

42

主题

98

帖子

452

积分

初级会员

积分
452
panqz
初级会员   /  发表于:2021-7-5 18:39  /   查看:1801  /  回复:5
你好,请问实现数据的校验后,但是模板保存后,填写数据的时候,校验规则就失效了,不管填写的内容是否符合校验规则都会标亮,提示不合法,请问大概是什么原因造成的?还是我必须将单元格的正则表达式保存到库里面,页面初始化后,再将校验规则取出重新渲染页面才可以?
代码为:
  1. var nCondition = new MyCondition(
  2.             "^[0-9]*[1-9][0-9]*[        DISCUZ_CODE_0        ]quot;);
  3.         var validator = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition);
  4.         validator.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);

  5.     function MyCondition (reg){
  6.                 this.reg = reg;
  7.         GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments);
  8.     }
  9.     MyCondition.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
  10.     MyCondition.prototype.evaluate = function (evaluator, baseRow, baseColumn, actualObj) {
  11.                 var reg = new RegExp(this.reg);
  12.                 if (reg.test(actualObj)) {
  13.                    return true;
  14.                 }else{
  15.                    return false;
  16.                 }

  17.     };
复制代码
我现在需要获取设置的reg,如何获得reg?
(我的问题和https://gcdn.grapecity.com.cn/showtopic-56067-1-295.html一样,但是不知道他是怎么解决的,对了,希望您别给我发官网这部分api地址,那个已经看了,没看懂)

5 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-6 08:53:57
沙发
出现这个问题是因为SpreadJS在系列化的时候是无法将正则表达式序列化保存,因此这个数据验证就会丢失,只能在加载json的时候重新给单元格设置数据验证。
回复 使用道具 举报
panqz
初级会员   /  发表于:2021-7-6 09:13:15
板凳
那到底是序列化解决这个问题还是重新设置呢?如果保存不了正则表达式,那我保存一个其他的值也可以,比如
  1.     function MyCondition (type){
  2.                 this.type =type;
  3.    GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments);
  4.     }
复制代码


这个type指的是类型,比如是phone验证类型,email验证类型等等,正则表达验证我可以重新设置,但是我需要在保存后知道当前这个单元格是设置的数据类型是那种type类型,这种该怎么解决,最好给我贴出代码
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-6 10:14:49
地板
panqz 发表于 2021-7-6 09:13
那到底是序列化解决这个问题还是重新设置呢?如果保存不了正则表达式,那我保存一个其他的值也可以,比如
...

是需要重新设置,你描述的type类型这个目前也是无法直接序列化的,如果你想保存这个数据验证的类型可以用tag实现。也就是给单元格加上tag,例如sheet.getCell(0, 0).tag('id');
回复 使用道具 举报
panqz
初级会员   /  发表于:2021-7-6 11:18:48
5#
刚试了,用tag也是保存后刷新就没了,tag拿不到
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-6 11:35:39
6#
panqz 发表于 2021-7-6 11:18
刚试了,用tag也是保存后刷新就没了,tag拿不到

tag是可以序列化的,请问你是怎么设置的呢?我在单元格A1设了一个tag,导出为json后,再导入一个新的表单还是存在的。 image.png944439392.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部