проверка уникальности поля формы в extjs4 - PullRequest
0 голосов
/ 12 июня 2011

Есть ли более чистый способ определения уникального поля формы в extjs.Ниже приведен пример кода, который проверяет UID клиента при создании / редактировании клиента.Этот код работает, но имеет некоторые ошибки - например, при создании клиента, если вы вводите значение, которое уже присутствует в валидаторе БД, возвращает 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 голосов
/ 19 июля 2011

Как насчет использования проверки на стороне сервера?

Я ответил на похожую проблему здесь: extjs4 rails 3 проверка модели на уникальность

Очевидно, что вы можете изменить его на использование "ajax" вместо прокси "rest".

...