extjs4中的唯一表单字段验证

时间:2011-06-12 10:30:21

标签: forms field unique extjs4

是否有更简洁的方法在extjs中定义唯一的表单字段。下面是在客户端创建/编辑时检查客户端UID的示例代码。此代码正在运行但有一些错误 - 例如,在客户端创建时,如果输入DB验证器中已存在的值,则返回true,直到您对该字段失去焦点。

Ext.define('AM.view.client.UniqueField', {
    extend: 'Ext.form.field.Text',
    alias : 'widget.uniquefield',

    vtype: 'UniqueUid',

    initComponent: function() {

    Ext.apply(Ext.form.field.VTypes, {

        UniqueUidMask : /[0-9]/i,
        UniqueUid : function(val,field) {
            if (val.length < 9) {
                Ext.apply(Ext.form.field.VTypes, {
                    UniqueUidText: 'Company ID is too small'
                });
                return false;
            } else {
              var paste=/^[0-9_]+$/;
              if (!paste.test(val)) {
                Ext.apply(Ext.form.field.VTypes, {
                    UniqueUidText: 'Ivalid characters'
                });
                return false;
               } else {

                 var mask = new Ext.LoadMask(field.up('form'),{msg:'Please wait checking....'});  
                     mask.show();
                 var test= 0;
                 var store = Ext.create('AM.store.Clients');
                     store.load({params:{'uid':val, 'id': Ext.getCmp('client_id').getValue()}});
                     store.on('load', function(test) {
                      mask.hide();
                        if(parseInt(store.getTotalCount())==0){
                         this.uniqueStore(true);
                        }else{
                           Ext.apply(Ext.form.field.VTypes, {
                              UniqueUidText: 'Company ID is already present'
                           });
                         this.uniqueStore(false);
                        }
                     },this)

                return true;    
               }
            }}
      },this);       


    this.callParent(arguments);

    },

    uniqueStore: function(is_error){

        Ext.apply(Ext.form.field.VTypes, {
        UniqueUidMask : /[0-9]/i,
        UniqueUid : function(val,field) {
            if (val.length < 9) {
                Ext.apply(Ext.form.field.VTypes, {
                    UniqueUidText: 'Company ID is too small'
                });
                return false;
            } else {
              var paste=/^[0-9_]+$/;
              if (!paste.test(val)) {
                Ext.apply(Ext.form.field.VTypes, {
                    UniqueUidText: 'Ivalid characters'
                });
                return false;
               } else {

                 var mask = new Ext.LoadMask(field.up('form'),{msg:'Please wait checking....'});  
                     mask.show();

                 var store = Ext.create('AM.store.Clients');
                     store.load({params:{'uid':val, 'id': Ext.getCmp('client_id').getValue()}});
                     store.on('load', function(test) {
                      mask.hide();
                        if(parseInt(store.getTotalCount())==0){
                         this.uniqueStore(true);
                        }else{
                         this.uniqueStore(false);
                        }
                     },this)

                return is_error;    
               }
            }}
      },this); 

    }

});

1 个答案:

答案 0 :(得分:0)

如何使用服务器端验证?

我在这里回答了类似的问题:extjs4 rails 3 model validation for uniqueness

显然,您可以将其更改为使用“ajax”而不是“rest”代理。