Javascript 正在验证网格所有行中的所有单元格

Javascript 正在验证网格所有行中的所有单元格,javascript,slickgrid,Javascript,Slickgrid,给定一个平滑网格,如何触发所有行中的所有单元格进行验证?或者使用JavaScript触发一次要验证的单元格(然后我可以对所有行中的所有单元格使用) 在这个用例中,用户必须编辑每个单元格并提供默认值以外的内容,我们希望确保他们已经这样做了,如果他们没有这样做,我们希望显示默认的验证错误行为 目前,验证似乎只在编辑的字段上进行。根据观察,Slickgrid的默认验证仅限于的validate功能,该功能检查是否有任何可用的验证器仅将值作为参数传递。为了提供额外的上下文信息,需要一个自定义编辑器,或者更

给定一个平滑网格,如何触发所有行中的所有单元格进行验证?或者使用JavaScript触发一次要验证的单元格(然后我可以对所有行中的所有单元格使用)

在这个用例中,用户必须编辑每个单元格并提供默认值以外的内容,我们希望确保他们已经这样做了,如果他们没有这样做,我们希望显示默认的验证错误行为


目前,验证似乎只在编辑的字段上进行。

根据观察,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}
}
要验证整个网格,请提供一种验证方法,该方法在每一行上迭代,查看每一列的验证器。根据验证结果,将建立
rowIndex->collection of failures
的关系映射,以传递给本机
onValidationError
事件。这允许订阅处理存在错误的用户通知。此外,验证结果还可用于通过


您是否正在使用任何其他可以将这部分“工作”委托给的框架?正如您所观察到的,Slickgrid的默认验证仅限于
编辑器的
validate
功能,该功能仅将值作为参数传递。您可以修改源代码以实现所需的行为,但我个人会将这种类型的验证委托给另一个框架(ie)。。。虽然我偏爱这种组合,因为我有使用它的经验。不,我更愿意坚持使用内置的SlickGrid验证。我已经完成了完整的网格验证。
validate
按钮将针对每个数据条目运行定义的任何列
validator
。默认的验证错误行为是不允许关闭编辑器输入字段,因此我添加了单元格闪烁来说明需要在何处实现所需的故障处理。其次,我不知道默认值是什么,所以我只使用了要求为
>0
@Origineil-wow的数字,这很酷。将此作为答案发布,我会给你奖金(即使不完全匹配,我也不想浪费分数,我感谢你的努力)
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())
    }
   }