Blog

ExtJS and Sencha Touch Themes and Templates

Las Pestañas o Tabs

Jun 24, 2009 | Español | By | 19 Comments | Read in English

Las pestañas son muy útiles para dividir la información por secciones o por categorías, en Ext JS es muy sencillo realizar esto, este tutorial se muestra como hacerlo.

Las Pestañas o Tabs
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 continuar asegúrate de descargar los recursos para este tema, descomprimir el ZIP y copiar el contenido dentro de la carpeta “paneles” que creamos al inicio de este capítulo.

Para este tutorial vamos a crear una ventana, dentro de ésta vamos a colocar un TabPanel con varios tabs que crearemos dinámicamente en tiempo de ejecución, te invito que veas el demo que he preparado.

Tab1

Ejemplo final

El TabPanel

Un TabPanel es un contenedor de pestañas o tabs, no existe un componente “Tab” pero podemos agregarle el componente “Ext.Panel”, “Ext.grid.GridPanel”, “Ext.tree.TreePanel” y cualquier componente que herede del “Panel”.

A continuación vamos a crear el TabPanel de la siguiente manera:

//creamos el primer tab
var home = new Ext.Panel({
	title:'Home',
	iconCls: 'home-icon',
	html: 'This is the home page example'
});

this.tabs = new Ext.TabPanel({
	items: home //le agregamos el primer tab
});

En el código anterior primero se creó un panel que será el home, luego se ha creado el “TabPanel” y únicamente se le está asignando la variable “home” para convertirse en el primer tab, hasta ahora no se ve nada en la pantalla, esto es porque no lo hemos “renderizado”, para mostrarlo podemos utilizar la propiedad “renderTo”, o el método “render” o en este caso utilizar una ventana que contenga el “TabPanel” de la siguiente manera:

var win = new Ext.Window({
	title:'Tabs example',
	width:600,
	height:500,
	bodyStyle: 'background-color:#fff;',
	items: this.tabs //le asignamos el tabpanel
});
win.show();

El código anterior debe ser familiar para nosotros, pues ya lo hemos estudiado en temas anteriores, si actualizamos la página donde se ejecuta este script veremos algo semejante a la siguiente imagen.

Tab2

Tab panel en ventana con solo un tab

Si eres observador notarás que el tab “home” no aparece activado hasta que le damos clic con el Mouse y aparece su contenido; si queremos que el contenido aparezca desde el principio tenemos que utilizar la propiedad “activeTab” y asignarle el índice del tab que queremos activar, entonces el código del “TabPanel” quedaría de la siguiente manera:

this.tabs = new Ext.TabPanel({
	border: false,
	activeTab: 0, //<--activar el primer tab
	items:[home]
});

Es importante notar que los índices comienzan en “0”, por lo tanto para activar el primero tenemos que activar el tab con el índice cero.

Tab3

Primer tab activado automáticamente

Agregar Tabs en tiempo de ejecución

Ahora vamos a agregar varios tabs en tiempo de ejecución, es decir dinámicamente, para eso vamos a escribir el código necesario dentro del método “addTab” que se encuentra en el objeto “TabPanelTutorial” el cual ya viene definido en el material de apoyo que descargamos, dentro de este método vamos a crear un panel y se lo vamos a agregar el “TabPanel” que hemos creado anteriormente.

addTab: function(i){
	//aquí va el código para agregar un nuevo tab
	var tab = new Ext.Panel({
		title: 'Tab '+i,
		closable: true, //<-- este tab se puede cerrar
		iconCls: 'app-icon',
		tbar:[{iconCls:'save-icon'},{iconCls:'spell-icon'},{iconCls:'search-icon'},{iconCls:'send-icon'},{iconCls:'print-icon'}],
		html: 'This is the content for the tab number '+i
	});

	this.tabs.add(tab); //con esto le agregamos el tab
}

El código anterior crea un panel con la propiedad “closable”, esto hace que el tab pueda ser cerrado por el usuario en cualquier momento, además se le agregó una barra de herramientas, la cual no hace nada pero quiero enfatizar que podemos utilizar cualquier configuración del componente Panel.

Por último necesitamos invocar el método que acabamos de crear mediante un ciclo dentro del método “init” de la siguiente manera:

init: function(){
	//… código removido
	win.show();

//creamos 10 tabs
	for(var i=0;i<10;i++){
		this.addTab(i+1);
	}
},

Tab4

Tabs agregados dinámicamente

Agregar un scroll a los tabs

Hasta ahora tenemos un problema, y es que no aparecen los últimos tabs porque la ventana es más pequeña, esto lo podemos solucionar agregando un “scroll” para que podamos desplazar los tabs y mirar todos por medio de la propiedad “enableTabScroll” del “TabPanel” de la siguiente manera:

this.tabs = new Ext.TabPanel({
	border: false,
	activeTab: 0,
	enableTabScroll:true, //<-- muestra un scroll para los tabs
	items:[home]
});

Tab5

TabPanel con scroll para mover los tabs

El código completo para este tutorial queda de la siguiente manera:

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

com.quizzpot.tutorial.TabPanelTutorial = {
	init: function(){
		//Aquí está el código inicial
		var home = new Ext.Panel({
			title:'Home',
			iconCls: 'home-icon',
			html: 'This is the home page example'
		});

		this.tabs = new Ext.TabPanel({
			border: false,
			activeTab: 0,
			enableTabScroll:true,
			items:[home]
		});

		var win = new Ext.Window({
			title:'Tabs example',
			width:600,
			height:500,
			bodyStyle: 'background-color:#fff;',
			items: this.tabs
		});
		win.show();

		for(var i=0;i<10;i++){
			this.addTab(i+1);
		}
	},

	addTab: function(i){
		//here the code to add a new tab
		var tab = new Ext.Panel({
			title: 'Tab '+i,
			closable: true, //<-- this tab is closable
			iconCls: 'app-icon',
			tbar:[{iconCls:'save-icon'},{iconCls:'spell-icon'},{iconCls:'search-icon'},{iconCls:'send-icon'},{iconCls:'print-icon'}],
			html: 'This is the content for the tab number '+i
		});

		this.tabs.add(tab);
	}
}

Ext.onReady(com.quizzpot.tutorial.TabPanelTutorial.init,com.quizzpot.tutorial.TabPanelTutorial);

Conclusiones

El TabPanel es un Widget muy utilizado para crear interfaces usables, además es muy flexible y fácil de utilizar, te recomiendo mirar el API para que conozcas algunas otras propiedades de este componente y como siempre si tienes dudas o sugerencias favor de hacerlas en los comentarios o bien suscríbete en el foro el cual esta creciendo poco a poco con la ayuda de todos ustedes.

19 Responses to “Las Pestañas o Tabs”

  • Osvaldo Jul 21, 2009

    Por supuesto que me gusto el post, socio te agradesco esto y no sabes cuanto, he aprendido muchisimo con tu tutorial en solo una semana. Si no hago preguntas es por que explicas muy bien tus ideas y nunca tengo dudas, despues lo que queda es practicar. gracias otra ves

  • Héctor Aug 19, 2009

    Hola, muy bueno tu curso, felicitaciones!, estoy estudiandolo atentamente. Soy un absoluto novato en estas lides y me gustaria que me respondieras la sgte consulta: se puede cargar otro elemento dentro de un tab-panel, digamos un form, desde otro archivo? Gracias

    • Crysfel Aug 19, 2009

      Así es, para eso utilizas la propiedad “items” del elemento padre.

      new Ext.TabPanel({
      title: ‘ejemplo’,
      items:[grid,form,etc...]
      })

  • Héctor Aug 20, 2009

    gracias por tu pronta respuesta, pero quisiera saber como cargar esos ‘items’ desde otro archivo js. si me puedes dar alguna indicacion seria fabuloso. :)

  • pamela Sep 07, 2009

    esto vale para dreamweaver por que copio el codigo fuente pero no se me ve bien

  • fires Oct 04, 2009

    pamela::
    a que te referis con que esto vale en el dreamweaver??
    si podrias ser mas explicita??-…
    asi te ayudamos..

  • Leonardo Oct 13, 2009

    Buenas tardes, amigo sabes alguna forma de cambiar el color a los Tab? es decir mantener todos del mismo color por defecto de la libreria ext js que es el azul y solo hacer una de ellas roja?. Saludos!

  • pablo Dec 15, 2009

    hola, muy buen tutorial me encanta, pero tengo una pregunta, si se puede agregar tabs en tiempo de ejecucion, como puedo esconderlo y como puedo mostrarlo despues de cerrarlo con la propiedad que tiene que es closeable

  • befama Apr 03, 2010

    Hola, primero que todo gracias por el curso. Quiero saber como puedo ingresar a cada tabs una dirección web. utilicé el iframe con src y funcionó pero el problema es que el tab sale solo en una franja de unos 300 pixel en el height.no he podido lograr que la página se vea de tamaño completo. gracias de antemano.

    • befama Apr 06, 2010

      ups, me contesto la pregunta. Bueno todo parece ser producto de una (,) que omití por eso no me funcionaba cambiar el largo del tab.

  • Eduardo Jun 23, 2010

    Hola te felicito me a ayudado mucho tus tutoriales, si me podrias ayudar tengo un problema con las pestañas yo creo objetos de panel y los gregos y eso se hace perfecto el problema es cuando vuelvo a llamar a la pestaña no se carga sabes cual podria ser el problema¿?

  • Geovanni Escalante Jul 21, 2010

    Hola Crysfel, excelentes tus cursos fáciles de entender, pero tengo una consulta como hacer para agregar una ventana dentro de un tab, porque la idea que tengo es hacer un form diferente en cada tab

  • Alejandro Aug 02, 2010

    Hola como puedo cargar una nueva pestaña, digamos cuando se de clic en un boton y asi poder cargar cuantas necesite.

    gracias…

    • Alejandro Aug 03, 2010

      bueno yo mismo me respondo, aunque no se si esta sea la mejor forma es la que me funciona:

      com.quizzpot.tutorial.Window.addTab(id_a_crear, ‘Representante ‘+tabuladores);

      ahora por si alguien me puede ayudar, como activo una de las pestañas?

    • Crysfel Aug 04, 2010

      Utiliza el método “activate” de la instancia del “TabPanel”, ese método recibe el tab a activas o su identificador.

      Saludos

  • Geovanni Escalante Aug 10, 2010

    Buenas noches a todos, tengo una consulta, espero que me contesten he hecho ya varias consultas y hasta ahora no he recibido ninguna respuesta, bueno la pregunta es como cargar dentro de un tab un formulario que cree en otro archivo .js, es decir en un archivo tab.js creo el tab y en otro form.js creo el formulario, pues quiero llamar a form,js dentro de tab.js

    • Crysfel Aug 11, 2010

      Importas ambos archivos JS en tu documento y la mejor opción es programar tus componentes mediante Objetos de tal manera que solamente crees una instancia de tu formulario y lo agregues a tu tab usando “tabs.add(formulario)” recuerda hacer un “doLayout()” del componente tabs.

      Saludos

  • german sanchez Sep 10, 2010

    Cual seria la manera de cuando se selecciona un tab, este me permita que el contenido del mismo se muestre con un efecto?

  • david Mar 08, 2011

    Hola queria saber como hacer para que el contenido de un tab se cargue cuando lo activo??. Osea no quiero que se carguen los contenidos de los tab que no estan activos, Saludos, muy buenos los tutoriales

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!