验证SlickGrid中所有行的所有单元格

5
给定一个SlickGrid,如何触发验证所有行的所有单元格?或者使用JavaScript触发一次单元格验证(然后我可以对所有行的所有单元格使用)? 用例是用户必须编辑每个单元格并提供除默认值以外的内容,并且我们希望确保他们这样做如果他们没有完成,我们想显示默认的验证错误行为。 目前似乎仅在编辑字段上进行验证。

你是否使用其他框架可以将这部分“工作”委托出去?正如你所观察到的,Slickgrid 的默认验证仅限于 editorvalidate 函数,该函数仅传递值作为参数。你可以修改源代码以实现所需的行为,但我个人会将此类验证委托给另一个框架(例如 Knockout Validation)...尽管我对此组合有经验,因此有点偏爱它。 - Origineil
不,我更喜欢使用内置的SlickGrid验证。 - jwl
我已经开始了一个完整的网格验证演示。 validate 按钮将针对每个数据条目运行任何定义为 validator 的列。默认验证错误行为 是不允许关闭编辑器输入字段,因此我添加了单元格闪烁以说明您需要实现所需的失败处理的位置。其次,我不知道 默认 值是什么,因此我只使用要求它们为 > 0 的数字。 - Origineil
@Origineil - 哇,太酷了。把这个作为答案发布,我会给你奖励(即使不是完全匹配,我也不想让积分浪费,而且我很感激你的努力)。 - jwl
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2
如下所述,Slickgrid的默认验证仅限于编辑器validate函数,该函数检查是否有任何可用的验证器,并仅将值作为参数传递。为了提供更多上下文信息,需要使用自定义编辑器或更具体地说是自定义验证函数。
this.validate = function() {
   if (args.column.validator) {
       args.newValue = $input.val()
       var validationResults = args.column.validator(args);

       if (!validationResults.valid) {
          return validationResults;
       }
   }

  return { valid: true, msg: null };
};
每个列都需要一个验证器,其中默认值将与来自编辑器的新值或现有值以及任何其他必需的验证方面进行比较。
var Validator = function(args) {

  //validate the existing value or the incoming editor value
  var value = args.newValue ? args.newValue : args.item[args.column.field]
  var result = value > 0 
  return {valid: result}
}
为了验证整个网格,请提供一种验证方法,该方法迭代每一行,在每列上查找验证器。根据验证结果,建立一个基于“行索引 -> 失败集合”的关系映射,以便传递到本地的onValidationError事件中。这允许订阅处理用户通知存在错误的情况。此外,可以使用验证结果通过向网格提供特定的元数据来设置失败样式。
var validateColumns = function(args){

 var failures=[];

 for (c in columns) {
   var column = columns[c]
   if (column.validator) {
      if(!column.validator({row: args.row, item: args.item, column: column}).valid){
         failures.push({columnIndex: c, column: column, rowIndex: args.row, item: args.item})
      }
   }
 }
 return failures;
}

grid.validate = function() {
   var rowFailures = {}
   for (r in data) {
     //ignore our metadata provider (if applicable)
     if(r == 'getItemMetadata'){continue;}

     var failures = validateColumns({item: data[r], row: r})
     if(failures.length > 0){
       rowFailures[r] = failures;
     }
    }

    if(Object.keys(rowFailures).length > 0){
     grid.onValidationError.notify({"rowFailures": rowFailures}, new Slick.EventData())
    }
   }

小提琴


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,