Extjs自定义vtype

时间:2012-11-16 13:08:40

标签: javascript forms validation extjs4

我尝试使用自定义vtype验证文本字段以过滤空格,例如:“”。 我在app.js中定义了我的自定义vtype(即使用mvc模式)。

    Ext.Loader.setConfig({
        enabled : true,
        paths: {
            Ext: 'vendor/ext41/src',
            My: 'app'
        } 
    });
    Ext.apply(Ext.form.field.VTypes, {
        descartarBlanco:  function(value) {
            return /^\s+$/.test(value);
        }
    });

    Ext.application({
        name: 'CRUDManantiales',
        appFolder: 'app',
        controllers: ['Ui','Usuarios'],
        ....
    });

但是,Firebug显示了这个错误:

  

TypeError:vtypes [vtype]不是函数

我认为语法是正确的。但是,我不知道在哪里插入Vtype的代码。 任何的想法 ?。 感谢。

5 个答案:

答案 0 :(得分:2)

我在渲染表单之前将我的自定义vtypes放在应用程序的控制器中。

Ext.define('MyApp.controller.Main', {
    extend: 'Ext.app.Controller',
    ...
    init: function () {
        var me = this;
        me.control({
            ...
            'form': {
                beforerender: this.applyVtypes
            },
            ...
        })
   },
   ...
   applyVtypes: function() {
       Ext.apply(Ext.form.field.VTypes, {
           descartarBlanco:  function(value) {
               return /^\s+$/.test(value);
           }
       }
   }
   ...    
}

答案 1 :(得分:1)

当我遇到同样的问题时,我试图找到解决方案。当我将它添加到初始化时它工作正常:'在Ext.application中。

    Ext.application({
            ..., 

            launch: function() { 
                ... 
            }, 

            init: function() {
                Ext.apply(Ext.form.field.VTypes, {
                    descartarBlanco:  function(value) {
                        return /^\s+$/.test(value);
                    }
                }
                console.log(Ext.form.field.VTypes); // for verification
            }
    })

答案 2 :(得分:0)

可能是同一个问题但是使用Ext.data.Types它只在类型名称为大写时才有效。当小写会得到与您所看到的相似的消息时。

答案 3 :(得分:0)

您使用Ext.Loader,以便稍后可以在某处覆盖Ext.form.field.VTypes。尝试在实际使用之前添加vtype定义。

答案 4 :(得分:0)

您可以配置自己的电子邮件验证。

  

xtype:'textfield',
fieldLabel:'Email',
名称:'email',
  maskRe: / [a-z0-9 _.-@+] / i ,//你可以根据你的意愿改变它   要求。