2016-04-12 1 views
0

Ich versuche Felder in meinem Formular zu validieren, aber ich bekomme immer eine Fehlermeldung. Hier ist mein Code:Extjs in separaten Dateien validieren

Ext.define('ExtDoc.views.extfields.FieldsValidator',{ 
    valEng: function(val) { 
    var engTest = /^[a-zA-Z0-9\s]+$/; 
    Ext.apply(Ext.form.field.VTypes, { 

     eng: function(val, field) { 
     return engTest.test(val); 
     }, 

     engText: 'Write it in English Please', 
     // vtype Mask property: The keystroke filter mask 
     engMask: /[a-zA-Z0-9_\u0600-\u06FF\s]/i 
    }); 
    } 

}); 

Und ich definiere mein Feld wie folgt:

{ 
    "name": "tik_moed_chasifa", 
    "type": "ExtDoc.views.extfields.ExtDocTextField", 
    "label": "moed_hasifa", 
    "vtype": "eng", 
    "msgTarget": "under" 
} 

Der erste Schnipsel in einer separaten JS-Datei ist, und ich habe es in der Datei meiner Felder js nach Bedarf.

Wenn ich die Eingabe von Text in dem Textfeld beginnen, halte ich den folgenden Fehler msg im Explorer-Debugger zu sehen:

"SCRIPT438: Objekt unterstützt keine Eigenschaft oder Methode 'eng'"

Was könnte es sein? Habe ich etwas falsch erklärt?

Antwort

0

Sie haben Ihre eigene Klasse mit einer Funktion valEng(val) definiert, aber Sie instanziieren sie nicht, und Sie rufen die Funktion auch nirgends auf. Außerdem benötigt Ihre Funktion valEng(val) keinen Parameter, da Sie diesen Parameter nirgendwo verwenden.

Es wäre viel einfacher und lesbarer, würden Sie den Ext.define Teil entfernen und die Validatoren genau dort erstellen, wo Sie sie brauchen. Zum Beispiel, wenn Sie brauchen, um sie innerhalb einer initComponent Funktion:

initComponent:function() { 
    var me = this; 
    Ext.apply(Ext.form.field.VTypes, { 
     mobileNumber:function(val, field) { 
      var numeric = /^[0-9]+$/ 
      if(!Ext.String.startsWith(val,'+')) return false; 
      if(!numeric.test(val.substring(1))) return false; 
      return true; 
     }, 
     mobileNumberText:'This is not a valid mobile number' 
    }); 
    Ext.apply(me,{ 
     .... 
      items: [{ 
       xtype:'fieldcontainer', 
       items:[{ 
        xtype: 'combobox', 
        vtype: 'mobileNumber', 

Oder Sie Ihre application.js, in der init Methode hinzufügen könnte, wenn man es recht oft auf verschiedenen Ebenen Ihrer Anwendung benötigen:

Ext.define('MyApp.Application', { 
    extend: 'Ext.app.Application', 
    views: [ 
    ], 

    controllers: [ 
    ], 

    stores: [ 
    ], 

    init:function() { 
     Ext.apply(Ext.form.field.VTypes, { 
      mobileNumber:function(val, field) { 
       var numeric = /^[0-9]+$/ 
       if(!Ext.String.startsWith(val,'+')) return false; 
       if(!numeric.test(val.substring(1))) return false; 
       return true; 
      }, 
      mobileNumberText:'This is not a valid mobile number' 
     }); 
    }