Blog

Mensajes y alertas al usuario

Apr 02, 2009 | Español | By Crysfel | 25 Comments | Read in English

Los mensajes son importantes para la interacción del usuario con nuestros sistemas, Ext JS cuenta con un componente especial para remplazar los típicos mensajes “alert” o confirmaciones por unos más llamativos.

Mensajes y alertas al usuario
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

Antes de seguir adelante es necesario descargar el material de apoyo para este tema, el cual contiene un HTML con varios botones y algunos estilos, un archivo JS vacío en el cual trabajaremos y una imagen la cual usaremos para el ejercicio, puedes además ver una demostración de lo que haremos en este tutorial.

Empaquetando el ejemplo del tutorial

Vamos a definir un “paquete” en donde estaremos trabajando, hemos visto las ventajas de realizar esto anteriormente.

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

com.quizzpot.tutorial.Msg = {
	init: function(){
	//Aquí iré el código del tutorial
	}
}

//cuando el DOM este listo ejecutamos la función “init”
Ext.onReady(com.quizzpot.tutorial.Msg.init,com.quizzpot.tutorial.Msg);

Alertas

Mediante el componente “Ext.MessageBox” Ext JS nos proporciona los métodos necesarios para generar diferentes tipos de mensajes, uno de estos son los “alerts”, los cuales los generamos de la siguiente manera:

Ext.MessageBox.alert('Titulo','El mensaje que queremos dar');
//podemos usar el atajo
Ext.Msg.alert('Titulo','El mensaje que queremos dar');

Ahora vamos a agregarle el evento clic al botón “alert” que se encuentra en el HTML, dentro de este evento vamos a desplegar una mensaje de alerta.

Ext.get('alert').on('click',function(){
	Ext.Msg.alert('Alerta','Esto es una alerta!');
},this);

De esta manera cuando presionemos el botón “Alert” se mostrará el mensaje que definimos en el código anterior.

Confirmación

Para mostrar una confirmación utilizamos el método “confirm”, en el siguiente ejemplo se le agrega el evento clic al botón de “confirmación” de la siguiente manera:

Ext.get('confirm').on('click',function(){
	Ext.Msg.confirm('Confirmación','¿Estás seguro de querer hacer esto?');
},this);

Más adelante veremos como detectar el botón presionado y tomar las acciones correspondientes, por ahora nos conformaremos con mostrar el diálogo.

Prompt

Este componente nos permite solicitar al usuario información mediante un diálogo que contiene una caja de texto. En el siguiente código le agregamos el evento clic al botón correspondiente y cuando se dispara el evento únicamente se despliega un mensaje solicitando el nombre del usuario.

Ext.get('prompt').on('click',function(){
	Ext.Msg.prompt('Prompt','¿Cual es tu nombre?');
},this);

Más adelante veremos como capturar la información que el usuario ha introducido en la caja de texto.

Wait

Mediante este método podemos mandar al usuario un mensaje de espera, este mensaje contiene una barra de progreso la cual avanza lentamente indicando que algo está sucediendo.

Ext.get('wait').on('click',function(){
	Ext.Msg.wait('Cargando... porfavor espere!');
},this);

Si dejamos así el código anterior el mensaje se quedará ahí por siempre ya que no tiene opción de cerrarse, esto sucede por que nosotros debemos cerrarlo manualmente mediante una instrucción, normalmente lo cerraríamos cuando el proceso que lanzamos ha terminado, por ahora simplemente voy a mandar un “timeout” para cerrar el mensaje después de 6 segundos.

Ext.get('wait').on('click',function(){
	Ext.Msg.wait('Cargando... porfavor espere!');
	window.setTimeout(function(){
		Ext.Msg.hide();
	},6000);
},this);

Es importante mencionar que el método “hide” cierra cualquier mensaje que se esté mostrando en ese momento.

Callbacks

Los métodos anteriores (excepto el wait) reciben como tercer parámetro una función, esta función será ejecutada cuando el usuario de clic en algún botón o cuando cierre el mensaje, esta función recibe como primer parámetro el botón al cual el usuario dio clic, y en el caso del método “prompt” recibe un segundo parámetro donde viene el texto que el usuario introdujo en la caja de texto, a continuación se muestra como podemos ejecutar ciertas instrucciones de acuerdo a lo que el usuario eligió en un mensaje de confirmación.

Ext.get('confirm').on('click',function(){
	Ext.Msg.confirm('Confirmación','¿Estas seguro de querer hacer esto?',function(btn){
		if(btn === 'yes'){
			//si el usuario aceptó
			alert('Has aceptado los terminos!')
		}else{
			//si el usuario canceló
			alert('El usuario cancelo')!
		}
	});
},this);

También podemos pasarle una función para ser ejecutada de la siguiente manera:

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

com.quizzpot.tutorial.Msg = {
	init: function(){
		// código removido para mayor compresión…
		Ext.get('confirm').on('click',function(){
			Ext.Msg.confirm('Confirmación','¿Estas seguro de querer hacer esto?',this.callback);
		},this);

		// código removido para mayor compresión…

	},

	callback: function(txt){
		alert(txt);
	}
}

En el ejemplo anterior se creo una función dentro del objeto “Msg” la cual es invocada cuando el usuario da clic en algún botón del mensaje de confirmación.

Mensajes personalizados

Si necesitamos desplegar algún mensaje personalizado, por ejemplo cambiar el icono del mensaje o bien utilizar otros botones, entonces podemos hacerlo mediante el método “show” el cual recibe un objeto de configuración.

Ext.get('custom').on('click',function(){
	Ext.Msg.show({
		title: 'Personalizado', //<- el título del diálogo
		msg: 'Esto es un mensaje personalizado!', //<- El mensaje
		buttons: Ext.Msg.YESNO, //<- Botones de SI y NO
		icon: Ext.Msg.ERROR, // <- un ícono de error
		fn: this.callback //<- la función que se ejecuta cuando se da clic
	});
},this);

Este es un mensaje que tiene un ícono de error, existen otros íconos que podemos utilizar:

Ext.Msg.ERROR //Icono de error
Ext.Msg.INFO //Icono de información
Ext.Msg.WARNING //Icono de advertencia
Ext.Msg.QUESTION //Icono de pregunta

Si necesitamos mostrar algún otro ícono debemos crear una clase CSS para poner la imagen como background de la siguiente manera:

.profile{
	background:transparent url(profile.png) no-repeat;
}

Luego de esto se le especifica el nombre de la clase a la propiedad ‘icon’.

Ext.Msg.show({
	title: 'Personalizado',
	msg: 'Este es un mensaje personalizado!',
	buttons: Ext.Msg.YESNO,
	icon: 'profile', // <- ícono personalizado
	fn: this.callback
});

Conclusiones

Ext JS cuenta con estos métodos para comunicarse con el usuario los cuales podemos usarlos en lugar de los típicos “alert” o “confirm” que vienen por defecto con el explorador, permitiendo hacer los mensajes más llamativos.

25 Responses to “Mensajes y alertas al usuario”

  • cristian Apr 02, 2009

    excelente tutorial mi amigo!!!!

    • Iban Oct 13, 2009

      Una cosa, si es que quiero agrandar los message box y cambairles el color y el tamaño de la letra, cómo se hace? Sólo he logrado anchar el message box, porque sólo he encontrado el atributo minWidth. No he encontrado un atributo para el ancho (height).

    • Crysfel Oct 13, 2009

      Hola Iban, no hay una propiedad para el “height” porque se supone que crece mediante el contenido que tiene, tampoco nos permite cambiar los estilos del texto, lo que puedes hacer es revisar cuales son las clases CSS que se usan para darle formato al texto y sobreescribirlas usando los estilos que necesites ;) saludos

  • pablo Apr 03, 2009

    como siempre muy interesante el tuto ;)

  • Julio César Rodríguez Domínguez Apr 03, 2009

    Gracias por tu tiempo invertido, como siempre, sigue la calidad del curso.

  • darcktruck Apr 03, 2009

    hola no veo la hora de que este en el tema de aplicaciones adobe AIR con ext js :)

  • Elías Manchón Apr 09, 2009

    Hola Crysfel

    Una duda…, como puedo localizar los mensajes que yo muestro al usuario?. Vimos como localizar los del framework ExtJS, pero yo me refiero a los que usamos nosotros para interactuar con el usuario, por ejemplo los que has usado en este tema.

    Gracias y saludos.

    P.D.: Ánimo con el curso, es una pasada.

    • Crysfel Apr 13, 2009

      Existen diferentes soluciones para resolverlo, te voy a comentar como lo resolví yo en este sitio, hice un plugin para wordpress en el cual creo un “template tag” para que lo pueda utilizar en los archivos del template del sitio, dentro de esta función lo que hago es detectar el lenguage del navegador, luego busco en la base de datos mediante una llave (footer.social.twitter) el texto en el lenguaje seleccionado, si no hay traducción para ese lenguaje muestro el default (ingles), luego imprimo el respectivo texto, es importante mencionar que no debe haber textos “harcodeados” pues no serán traducidos, cuando quiero imprimir un texto lo hago así:

      <?php 
      
      // en lugar de poner el título
      //directamente en el código,
      //voy por el a la DB dependiendo
      //del lenguaje seleccionado
      echo languageTranslator('header.blog.title'); 
      
      ?>
      

      Ahora, si quieres utilizar esto con JavaScript, en este caso Ext JS, puedes crear un objeto donde donde por medio de Ajax solicite al servidor todos los textos necesarios para luego ser utilizados por los componentes.

      Lo hice de esta manera ya que algo así lo hace el Spring Framework que utilizo en mi trabajo, seguramente existen otras soluciones.

      saludos

    • Elías Manchón Apr 14, 2009

      Gracias Crysfel, investigaré más sobre el tema, por cierto, yo también uso Spring Framework :-) , saludos.

  • pablo Apr 15, 2009

    para cuando el siguiente tuto? ;)

    • Crysfel Apr 15, 2009

      Pronto pronto… aunque será escrito porque no puedo hablar mucho en estos momentos :(

  • Nicolas Aranda Jul 15, 2009

    Muy buen post, estaba buscando el tema de los Ext.Msg.wait y aqui pude solucionarlo

    Se agradece.

    Saludos

  • Miklo velka Jul 29, 2009

    Que honda podrias publicar un ejemplo para crear la aplicacion de tipo escritorio la he estudiado del ejemplo que esta en la api pero me confunden algunos terminos

    sale…

  • Rosendo Guzman Nogueda Nov 26, 2009

    De verdad felicidades, me estoy desvelando, pero como estoy aprendiendo bastante. gracias por tu tiempo, va de mi parte una tasa de cafe.

    • Crysfel Nov 27, 2009

      Gracias por tus donativos :D

      Saludos

  • adler Feb 05, 2010

    Muchas gracias por el tutorial muy bien explicado gracias por tomarte tu tiempo en hacerlo y demostrarlo me ayudo mucho le da un mejor aspecto a mis formulario de nuevo mil gracias

  • Mario Apr 15, 2010

    Hola todo parece muy bonito pero una ayuda toda esas funciones como las llamo desde un html o como hago para usarlas no me keda claro por fis gracias cualquier ayuda mi correo
    lobo2002610@hotmail.com GRACIAS DE VERDAD

    • Crysfel Apr 15, 2010

      Necesitas importar los archivos JS en tu documento, descarga el código fuente para que te des una idea mejor.

      Saludos

    • Mario Apr 19, 2010

      hola man , si ya me descarge todo me parece que no me funciona por la librerias q debe tener esas funciones para ser exactos esto:
      src=”../ext-2.2/adapter/ext/ext-base.js”>
      src=”../ext-2.2/ext-all.js”
      esos dos me parece q no encuentra y no hace nada solo tengo este: src=”messages.js”
      y eso de importar a que te refieres gracias man

    • Crysfel Apr 19, 2010

      Necesitas descargar la librería de ExtJS y modificar las rutas adecuadamente: http://www.quizzpot.com/2009/02/instalacion-basica-del-framework/

  • Daniel May 03, 2010

    Muy buen tutorial, te felicito, mi duda es y si necesitara colocar dos campos en el menssage custom?, como para un login, como podria hacer?

    • Crysfel May 04, 2010

      Utilizaras una ventana con un formulario dentro.

  • ivan Jun 10, 2010

    hola sabes hice todo lo que dice el tutrial , pero el boton custom no envia los valores al apretar el boton de echo muevo el mouse y desaparece el mensaje quien me puede ayudar

  • ivan Jun 10, 2010

    alguien me puede ayudar plis

  • Luis Jun 19, 2010

    Saludos amigo. Hace poco comence a trabajar con Extjs y entre el desarrollo me surgio la siguiente duda:
    Como hago para que en un mensaje se imprima el valor de un field-label que contendra bien sea un codigo o un nombre de un usuario. Gracias.

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!