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,{msg:\'Please wait checking....\'});  
                     mask.show();

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

                return is_error;    
               }
            }}
      },this); 

    }

});
    

解决方法

        如何使用服务器端验证? 我在这里回答了类似的问题:extjs4 Rails 3模型验证的唯一性 显然,您可以将其更改为使用\“ ajax \”代替\“ rest \”代理。