有没有办法将额外的参数传递给Handsontable验证器函数?

时间:2018-02-07 22:34:13

标签: handsontable

我正在使用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
    }
  ]
});

问题是,我可以将一些额外的参数传递给自定义验证器函数(myCustomColumnAValidator和myCustomColumnBValidator),而不是valuecallback函数引用吗?我需要一些额外的参数作为验证逻辑的一部分。

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

任何指针都将非常感激。谢谢!

3 个答案:

答案 0 :(得分:0)

通过你想要的任何东西

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

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

答案 1 :(得分:0)

尝试这种方式

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

答案 2 :(得分:0)

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

literal