【问题标题】:Is there a way to pass extra parameters to Handsontable validator functions?有没有办法将额外的参数传递给 Handsontable 验证器函数?
【发布时间】:2018-07-18 08:53:00
【问题描述】:

我正在使用 Handsontable v0.35.1,这是发布此问题时的最新版本。它被用作 Angular 5 (Typescript) 组件和视图的一部分。

对于表格中的每个单元格,我按照 official documentation 中的指南附加了一个自定义验证器。代码如下所示:

class ValidationService {

    static myCustomColumnAValidator(value, callback) {

        var contextObject = this;
        //... validation logic
    }

    static myCustomColumnBValidator(value, callback) {
        var contextObject = this;
        //... validation logic
    }
}

var hot = new Handsontable(document.getElementById('myTableContainer'), {

  data: [ { 'ColumnA': 'Data'}, { 'ColumbB' : 'Data' } }],

  columns: [
    {
        data: 'ColumnA',
        validator: ValidationService.myCustomColumnAValidator
    },

    {
        data: 'ColumnA',
        validator: ValidationService.myCustomColumnBValidator
    }
  ]
});

问题是,除了valuecallback 函数参考之外,我可以向自定义验证器函数(myCustomColumnAValidator 和myCustomColumnBValidator)传递一些额外的参数吗?我需要一些额外的参数作为验证逻辑的一部分。

还请注意,我必须将ValidationService 中的自定义验证器函数标记为static,因为当Handsontable 调用验证函数时,上下文对象this 被覆盖为ColumnSettings 对象。如果不是这种情况,我可以通过其构造函数使用一些成员变量初始化 ValidationService,并使用引用 ValidationService 实例的this 在同一验证函数的非静态版本中使用。但这似乎是不可能的,因为 Handsontable 覆盖了“this”上下文对象,我可以通过单步执行使用 ValidationFunction.call(contextObject, value, callback) 机制的 Handsontable 代码看到它。

任何指针将不胜感激。谢谢!

【问题讨论】:

    标签: handsontable


    【解决方案1】:

    试试这个方法,

    columns: [  
      {
        data: 'ColumnA',
        validator: (value, callback, extraData = this.something) => {
          console.log(extraData);
        }
      }
    ]
    

    【讨论】:

      【解决方案2】:

      在这里传递你想要的任何东西

      columns: [
        {
            data: 'ColumnA',
            validator: ValidationService.myCustomColumnAValidator,
            customParameter: 10
        }
      ]
      

      您可以在验证器中像 this.customParameter 那样访问它。

      【讨论】:

      • 这有效...但仅适用于常量,10 在这种情况下...我可以访问当前行数据吗? customParameter: data.iddata.ColumnB 之类的东西?
      • 如果我使用打字稿呢?
      【解决方案3】:

      使用 Typescript,我能够执行以下操作,以便将附加参数传递给 Handsontable 列验证器函数,以便验证器可以基于此参数动态。在我的例子中,参数是一个包含许多我需要评估的属性的完整对象:

        columns: [
          {
              data: 'ColumnA',
              validator: (value, callback) => {
                 return this.yourCustomValidatorFunction(value, callback, yourCustomParameterHere)
               }
          }
        ]
      

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 2022-09-27
        • 2021-02-27
        • 1970-01-01
        相关资源
        最近更新 更多