2010-11-12 3 views
0

J'ai le problème suivant: Je veux valider un champ DateField afin qu'il ait une valeur entre la plage minValue/maxValue. (supérieur ou égal, inférieur ou égal)Comment puis-je valider Ext.form.DateField en utilisant min/maxValue, sans utiliser le temps?

Le problème est que je pense que le cadre prend le temps en millisecondes.

J'ai essayé d'utiliser un vtype personnalisé tels que:

Ext.apply(Ext.form.VTypes,{ 
dates: function(val, field){ 
    try{ 
     if(this.disabled){ 
      return true; 
     } 

     if(Ext.value(val,null,false)==null){ 
      this.datesText = "This field is required."; 
      return this.allowBlank; //the text message won't be shown in case blank is allowed. 
     } 

     if(Ext.value(field.minValue,null,false)!=null){ 
      if(Ext.util.Format.date(val,"Ymd")<Ext.util.Format.date(field.minValue,"Ymd")){ 
       this.datesText = "The value is invalid.<br/>"; 
       this.datesText = "it must be greater or equal than " + field.minValue; 
       return false; 
      } 
     } 

     if(Ext.value(field.maxValue,null,false)!=null){ 
      if(Ext.util.Format.date(val,"Ymd")>Ext.util.Format.date(field.maxValue,"Ymd")){ 
       this.datesText = "The value is invalid.<br/>"; 
       this.datesText = "It must be lower or equal than " + field.maxValue; 
       return false; 
      } 
     } 

     return true; 

    }catch(e){ 
     return false; 
    } 
}, 
datesText: 'The value is invalid.', //error message 
datesMask:// //regexp to filter the characters allowed 

}); Fondamentalement, ce qu'il fait est de convertir les valeurs en un format 'Ymd', puis de comparer les valeurs sous forme de nombres.

Si je débogue ce code, la validation va bien, mais pour une raison quelconque, je reçois toujours un message d'erreur. Je crois que le framework tente de valider à nouveau le champ après ma validation.

Merci!

Sebastián

Répondre

1
minValue : Date/String 

La date de minimum autorisé. Peut être un objet de date Javascript ou une date de chaîne dans un format valide (par défaut à null).

maxValue : Date/String 

La date maximale autorisée. Peut être un objet de date Javascript ou une date de chaîne dans un format valide (par défaut à null).

et dans le cas où vous avez besoin de désactiver certaines dates

disabledDates : Array 

Un tableau de « dates » pour désactiver, sous forme de chaînes. Ces chaînes seront utilisées pour construire une expression régulière dynamique afin qu'elles soient très puissantes. Quelques exemples: // désactiver ces dates exactes:

disabledDates: ["03/08/2003", "09/16/2003"] 

// désactiver ces jours-ci pour chaque année:

disabledDates: ["03/08", "09/16"] 

// correspond seulement au début (utile si vous utilisez courtes années):

disabledDates: ["^03/08"] 

// désactiver tous les jours en Mars 2006:

disabledDates: ["03/../2006"] 

// désactiver tous les jours dans chaque Mars:

disabledDates: ["^03"] 
+0

Hey Antonio, désolé mais je ne veux pas utiliser la propriété disabledDates . Je veux juste que le framework valide mon Field en utilisant des dates au format Ymd, alors que le framework fait ceci:/* if (this.minValue && time

+0

I ' Essayez d'éviter de surcharger la méthode "getErrors" (http://dev.sencha.com/deploy/dev/docs/source/DateField.html#method-Ext.form.DateField-getErrors) et d'utiliser une validation personnalisée. –

+0

avez-vous essayé la propriété validationDelay, la valeur par défaut est 250ms. – Antonio

0

lieu de dates fixes mentionnées ci-dessus, utilisez ceci:

//doesn't allow past today 
maxValue: new Date() 
//Only allows 7 days in the past from current date. 
minValue: Ext.Date.add(new Date(), Ext.Date.DAY, -7) 
Questions connexes