Blog

Un calendario para capturar fechas

Jun 25, 2009 | Español | By Crysfel | 9 Comments | Read in English

El día de hoy vamos a hablar del componente DateField. Este componente provee un “input” de tipo fecha con formato de un calendario muy bien estilizado. DateField en Ext JS es un componente muy completo ya que brinda muchas opciones de configuración. En este tutorial discutiremos las configuraciones más importantes.

Un calendario para capturar fechas
Author: Crysfel

I'm a software developer with 6+ years of experience, when I'm not developing software I may be writing a tutorial, you can follow me on twitter

Material de apoyo

Para poder continuar necesitamos descargar el material de apoyo. Recuerde que este tutorial pertenece al capitulo de formularios, y al final del capitulo agregaremos nuestro DateField al formulario final, pero para evitar algunas confusiones haremos este tutorial en un archivo diferente.

Puedes ver el demo de lo que haremos en este tutorial, a continuación se muestran imagenes del componente que veremos el día de hoy.

datefiel imagendatefiel imagen

El componente DateField

Empaquetando el tutorial.

Procedemos a empaquetar nuestro código.

Ext.ns('com.quizzpot.tutorial');

Ext.BLANK_IMAGE_URL = '../ext-3.0/resources/images/default/s.gif';

com.quizzpot.tutorial.DateFieldTutorial = {
	init: function(){
		//aqui va el codigo del tutorial
        }
}
Ext.onReady(com.quizzpot.tutorial.DateFieldTutorial.init,com.quizzpot.tutorial.DateFieldTutorial);

A estas alturas ya todos sabes lo que el código anterior está haciendo, de no ser así te recomiendo leer el tutorial donde se explica más detalladamente.

Ventana

A continuación vamos a crear una ventana que alojará los diferentes tipos de configuraciones para el componente DateField que haremos, además nos servirá para visualizar los DateField que crearemos en este tutorial.

var win=new Ext.Window({
	title: 'DateField demo',
	bodyStyle:'padding: 10px',//alejamos los componentes de los bordes
	width:400,
	height:360,
	layout:'form'		//tipo de organizacion de los componentes
});
win.show();

Ya hemos explicado las propiedades de configuración en el tema de ventanas y paneles, si tienes dudas con el código anterior puedes repasar el tema, con respecto a la configuración “layout” hablaremos más adelante en un tema especial, por lo pronto solo ten en mente que asignándole “form” los campos se acomodarán en la ventana como en un formulario.

datefield imagen

La ventana que contendrá los campos de fechas

DateField Simple

Una vez creada nuestra ventana, vamos a crear nuestro primer componente tipo DateField.

 var dateField = new Ext.form.DateField({
	fieldLabel: 'Date',
	emptyText:'Insert a date...',
	format:'Y-m-d',
	width: 150
});

Ahora voy a dar una descripción de las propiedades utilizadas en el código anterior:

format: con esta propiedad definimos el formato de la fecha que se mostrará en nuestro campo. El formato ‘Y-m-d’, define un formato del tipo “año-mes-día”. Para ver más formatos debemos consultar el API del objeto Date en Javascript.

fieldLabel: es la propiedad común en todos los componentes, esta propiedad define el texto que acompañará al campo y mediante esta propiedad le mostramos al usuario el tipo de información que necesita introducir en el campo, por lo tanto procura poner algún texto descriptivo.

emptyText: esta propiedad la hemos visto anteriormente, al usarla hacemos que el campo despliegue un texto cuando está vacío, es conveniente utilizarla para desplegar ayuda extra al usuario.

Ahora agregamos el componente a nuestra ventana:

var win=new Ext.Window({
	bodyStyle:'padding: 10px',
	width:400,
	height:360,
	items: dateField, //<-- le asignamos el datefield
	layout:'form'
});
win.show();
datefield imagen

Un DateField básico

Un DateField Restringido

¿Qué pasa si queremos que nuestras fechas se muestren restringidas? Por ejemplo si queremos que sólo se puedan seleccionar días a partir de hoy. Para este tipo de configuración existen algunas propiedades que veremos en nuestro siguiente DateField.

var dateFieldR=new Ext.form.DateField({
	fieldLabel: 'Date from today',
	emptyText:'Insert a date...',
	format:'Y-m-d',
	minValue: new Date(), //<-- min date is today
	maxValue:'2009-08-28', // <-- max date
	value:new Date() // <-- a default value
});

Descripción de propiedades:

minValue: es el valor mínimo elegible en nuestro componente DateField.

maxValue: es el valor máximo elegible en nuestro componente DateField.

value: el valor con que se inicializa el campo, por defecto es “undefined”.

Puedes ver que en este ejemplo, en la propiedad “maxValue” le he puesto directamente una fecha, esto es únicamente para demostrar que también podemos asignarle una fecha en String y el componente se encargará de hacer las debidas conversiones de datos.

datefield imagen

Un DateField restringido

Conclusiones

El componente DateField es un componente bastante completo y nos brinda opciones de configuración en su mayoría iguales a las del componente TextField con algunas variaciones propias del componente, esto es porque DateField hereda de TextField.

Este fue tutorial corto pero al ver las diferentes configuraciones podemos comprender mejor el funcionamiento del componente DateField. En el siguiente tutorial discutiremos dos componentes muy bondadosos que son las áreas de texto y los editores HTML.

Como siempre los comentarios y sugerencias son bienvenidos, además recuerda seguirnos en Twitter para estar al tanto de las actualizaciones, si tienes dudas sobre este u otros temas del curso puedes registrarte en el foro y te podremos ayudar entre toda la comunidad.

9 Responses to “Un calendario para capturar fechas”

  • Crysfel Jun 25, 2009

    Especial agradecimiento a Jose Armando (@manduks) por su colaboración en este curso de Ext JS.

  • Sergio Jun 26, 2009

    Hola si mal no recuerdo el Ext.form.DateField (hasta hace unos meses atras estaba con problemas), si colocas la fecha 13/10/xx, es decir, cualquier fecha que elijas del 13 de Octubre, da lo mismo el año, te agrega o quita un día, no marca el mismo 13 de Octubre. En el sitio de EXTJS, aun no han encontrado la solución eso creo. Yo por lo menos saco el calendario y preformateo el campo para la fecha.

    • Nicolas Aranda Aug 06, 2009

      Sergio, sabes tengo el mismo problema con el mes de Octubre y no he podido dar con una solucion, tu como lo pudiste arreglar?

  • Elías Manchón Sep 12, 2009

    Sabeis si hay algún autocompletar para “Ext JS” en eclipse?.

    Gracias

    • Crysfel Sep 14, 2009

      checa este link a ver si te sirve http://www.spket.com/

      saludos :D

    • Elías Manchón Oct 09, 2009

      Si Crysfel, es una pasada, lo he integrado con eclipse, además incorpora un Ext theme builder, no es muy potente, pero por lo menos te permite cambiar el color de las css de forma visual.

  • Francisco Jul 12, 2010

    Sabes alguna manera de cambiar el idioma de un datefield? es decir que en vez de que diga June diga Junio.
    hay manera de pasarle un Store para cambiar eso, o algo así?

    • Geovanni Escalante Jul 22, 2010

      Simplemente debes colocar

      Después de

      Esto no sólo colocará el calendario en español sino todos los demás componentes, los archivos de idioma estan en la carpeta locale que viene con el framework, si quieres puedes editarlo para colocar los mensajes que quieras

  • Junior Jul 24, 2010

    Como podria colocar en algunos colores (ejemplo en ROJO) solo algunos dias (ejemplo 24/07/2010 , 26/07/2010, 27/07/2010) solo esos dias dejarlos en otro color y a la vez que aparescan bloqueados ¿?

Leave a Reply







Updates

RSS

Subscribe to our feeds to receive updates of our newest posts and free tutorials.

Site search

Maybe we have what you need, would you like to search first?

Donations

Would you buy me a cup of coffee? I am sharing my knowledge and time with you, help this project grow. Thank you!