7
votes

ExtJs Datefield en utilisant un format d'affichage différent

J'utilise un extjs Datefield contrôle dans une application Web ASP.NET MVC.

J'ai défini format propriété sur "ymd", de sorte qu'il analysera correctement le format "2009-08-11" du serveur et le renvoyera également dans ce format .

Cependant, j'aimerais afficher les données d'un format différent, plus convivial, notamment "D mms aaaa" en espagnol.

Je ne peux pas sembler comprendre comment faire cela. Je ne pense pas que la propriété altformats est utile, car cela ajoute simplement plus de formats d'analyse.

est-il possible d'utiliser un format d'analyse différent du format d'affichage? Ou je vais à ce sujet le mauvais moyen?


1 commentaires

Utilisez la fonction de rendu personnalisé pour afficher correctement le format espagnol.


4 Réponses :


6
votes

Oui. Il est possible.

voir http://extjs.com/deploy/dev/ Docs /? Classe = Date pour les formats de date. P>

Pour ce qui peut être personnalisé hors de la boîte, reportez-vous au dossier Ext-3.0.0 \ src \ locale \. Incluez le fichier approprié ou simplement personnaliser le vôtre, en utilisant sur les fichiers sous forme de modèle. P>

Par exemple: P>

Date.monthNames = [
   "Januar",
   "Februar",
   "Marec",
   "April",
   "Maj",
   "Junij",
   "Julij",
   "Avgust",
   "September",
   "Oktober",
   "November",
   "December"
];

Date.dayNames = [
   "Nedelja",
   "Ponedeljek",
   "Torek",
   "Sreda",
   "ÄŒetrtek",
   "Petek",
   "Sobota"
];

console.log((new Date()).format('Y-M-D'))


9 commentaires

Bonjour Joshua, je peux obtenir la date de format pour bien, en utilisant les fonctionnalités de localisation extjs. C'est juste que je souhaite utiliser un format d'affichage différent du format analysé.


Lorsque nous renvoyons des dates de retour du serveur, nous analysons toujours une date de JavaScript complète. Cela contourne toute ambiguïté éventuellement engagée en passant la date de SQL> C #> JavaScript. (C #) JSONResponse = "{MyDate: nouvelle date ('" + d.Tostring ("mm / jayyy hh: mm: ss") + "')}"; où d est de type DateTime. Voulez-vous dire dans un éditeurGradPanel ou dans un format de format?


Le datfield est à l'intérieur d'une forme. Si c'était à l'intérieur d'une grille, je pense que je pourrais remplacer le rendu de colonneModel pour faire un rendu personnalisé de l'objet de date.


Vous êtes correct sur la colonne Renderer. Lors de la définition de valeurs de votre formulaire ou d'accepter l'entrée de votre utilisateur dans un format différent au format d'affichage, vous avez défini sur votre champ, l'astuce reprendra une date javaScript pour que l'analyseur fonctionne correctement. Si c'est ce dernier, envisagez de remplacer les membres "FormatDDate" et "ParseDate" de "ext.form.datefield" avec un traitement supplémentaire pour convertir du texte typé à une date javaScript. Vous pouvez également envisager d'utiliser la bibliothèque Datejs conjointement avec votre implémentation extjs. Voir Bit.ly/datejs_extjs_compatibilittibilité


d'ailleurs. En réponse à votre dernier commentaire à Lewis. Si JavaScript est désactivé, ExtJS ne sera pas disponible non plus.


Ces formatDAteddate et parseDate sur le contrôle de contrôle très prometteur! Je ne savais pas que celles-ci existaient, ils ne sont pas dans la documentation (du moins pas sur la page que je regarde). Je verrai si je peux obtenir mon comportement désiré en remplaçant ces deux fonctions.


Il ressemble à formaformé n'est pas aussi utile que je pensais initialement, cette fonction est utilisée à la fois pour la chaîne montrée à l'utilisateur et la chaîne renvoyée sur le serveur. Je veux vraiment deux cordes différentes ...


Si vous souhaitez soumettre un format différent au serveur, je format de la fonction "AAA-MM-DD" souhaitée dans votre fonction JSON DEERIALIZER. Si vous ne pouvez pas faire cela, envisagez-vous écraser la méthode ext.lib.ajax.Serializeform pour gérer les dates de manière particulière que vous souhaitez faire des choses.


Explorez le code source pour voir exactement ce qui se passe lorsque vous soumettez votre formulaire. La méthode ext.lib.ajax.Serializeform est appelée à partir de la classe de baseform.js dans la méthode "GetValues".



1
votes

afin de clarifier ma compréhension que vous avez un champ de date qui:

  1. a besoin d'analyser sur un serveur, au format Y-M-D
  2. Vous souhaitez afficher la date dans le format D mmm aaaaa à l'aide de noms de mois Spaninsh

    Ma réaction initiale, basée sur ma compréhension, seriez-vous de configurer vos champs de date d'ext afin de formater et de valider le deuxième format ('d mmm aaayy') à l'aide de l'option de configuration au format (format: 'D mmm aaaa '). Ensuite, vous enverrez cela sur le serveur, à votre action du contrôleur (je suppose), en tant que paramètre de chaîne, pas une date d'heure. Ensuite, dans votre action de contrôleur analysez la chaîne de date et convertissez-la à l'aide de: xxx

    ou similaire, puis vous pouvez le convertir en tout format que vous aimez de cet objet de date.

    Cela ne laisse que les noms abrégés dans les champs de date dans le navigateur. Je ne suis pas tout à fait sûr de savoir comment EXT gère cela, mais je ne suis pas au courant de pouvoir remplacer le format de date et de la forcer à utiliser une culture spécifique, de EXT / JavaScript, de sorte que vous vous attendriez à ce que vous soyez à la Miséricorde du navigateur / OS sans écrire quelque chose vous-même.

    Mise à jour:

    combiné à l'exemple donné par Joshua pour les noms de mois / jour devrait vous donner la solution que vous recherchez. < / p>

    J'espère que cela aide.


4 commentaires

Bien sûr, je suppose que cela fonctionnera. J'espère juste qu'il y a une solution qui me permet de faire toute la mise en forme spécifique de la culture sur le côté du client et d'envoyer des formats simples, non culturels, des formats et depuis le serveur.


Ce dont vous avez besoin est quelque chose qui intercepte la soumission et transforme les dates validées. C'est bon pour les navigateurs activés JavaScript, mais n'avez-vous pas encore besoin de vous inquiéter de JS désactivé. Peut-être que ce n'est pas une préoccupation dans votre application? Je déteste les dates.


Eh bien, si JavaScript est désactivé, l'utilisateur devra simplement entrer une date au format AAAA-MM-DD, c'est bon avec moi (si la date est au format incorrect, le serveur retournera simplement sur la page avec un message d'erreur. ). Si l'utilisateur a activé JavaScript, ils bénéficient d'une expérience plus agréable avec un contrôle DatePicker localisé dans leur propre langue. Maintenant s'il n'y avait qu'un moyen de montrer la date elle-même dans le contrôle, dans leur langue ... :-)


Oh, je ne faisais pas attention au HTML généré, apparemment la date est dans un CSS-caché

, pas un masqué comme je l'ai pensé . Dans ce cas, tout le formulaire ne fonctionnera pas avec JavaScript désactivé, mais je ne me soucie pas vraiment de cela, il s'agit d'une application commerciale, et non d'un site Web du public.



4
votes

En réalité, le format code> code> est utilisé à la fois pour analyser et définir le format d'affichage. Tant que altformats code> contient tous les formats de données possibles que vous souhaitez prendre en charge pour analyse (la valeur par défaut inclut YMD), vous devriez pouvoir faire quelque chose comme ceci:

Ext.onReady(function(){
    new Ext.form.DateField({
        format: 'd F Y', // 'd mmm yyyy' is not valid, but I assume this is close?
        width: 200,
        renderTo: Ext.getBody(),
        value: '2009-08-11'
    });
});


1 commentaires

Je suppose que ça va très bien afficher. La chose est que j'aimerais avoir aaaayy-mm-dd comme format de la chaîne renvoyée sur le serveur. Donc, je peux obtenir l'analyse de travail avec AltFormats , mais le format visuel et le format "Send-to-Server" semblent avoir été fusionné dans le format unique format .



0
votes

Vous pourriez être intéressé par ces plugins pour Datefield et Timefield: http: // www .RaHULSINGLA.com / Blog / 2010/05 / EXTJS-DATE-DATE-Time-Field-Field-Field-Field-Entry-Saisie


0 commentaires