extjs验证器作用域

extjs验证器作用域,extjs,extjs4,validation,Extjs,Extjs4,Validation,如何定义texfield验证器范围? 我使用以下代码在控制器中定义验证器: this.editView.getRegNumberTextField().validator = this.regNumberValidator; //... regNumberValidator:function (input) { //validation here } 但在本例中,regNumberValidator函数的作用域是RegNumberTextField。我希望它是控制器的作用域。我用{scope

如何定义texfield验证器范围? 我使用以下代码在控制器中定义验证器:

this.editView.getRegNumberTextField().validator  = this.regNumberValidator;
//...
regNumberValidator:function (input) {
//validation here
}

但在本例中,regNumberValidator函数的作用域是RegNumberTextField。我希望它是控制器的作用域。我用{scope:this}尝试了Ext.apply,但没用。应该有一些方法来定义范围,比如在('event',handler,scope)语句中。

您只需要创建一个委托:

this.editView.getRegNumberTextField().validator = this.regNumberValidator.createDelegate(this);

//...

regNumberValidator:function (input) {
//validation here
}

我的问题的解决办法是Ext.bind 代码是:

this.editView.getRegNumberTextField().validator = Ext.bind(this.regNumberValidator,this);

只需将“controller”字段属性定义为您的控制器,然后您就可以使用此.getController()访问验证程序中的控制器范围:

xtype: 'combo',
controller: 'mycontrolleralias',
validator :  function () {
    return this.getValue() === this.getController().getViewModel().get('record').getId()?
                                        'Affiliate cannot be the parent of itself':true;
}