<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quizzpot &#187; Español</title>
	<atom:link href="http://www.quizzpot.com/category/es/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.quizzpot.com</link>
	<description>Cursos en video gratuitos</description>
	<lastBuildDate>Fri, 09 Dec 2011 11:38:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Definiendo aplicaciones en Ext4</title>
		<link>http://www.quizzpot.com/2011/11/definiendo-aplicaciones-en-ext4/</link>
		<comments>http://www.quizzpot.com/2011/11/definiendo-aplicaciones-en-ext4/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 14:33:36 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3071</guid>
		<description><![CDATA[En versiones anteriores cada quien era responsable de organizar y estructurar sus aplicaciones, muchos nos encontramos en serios problemas y aprendimos sobre la marcha a base de cometer errores y aprender de los mismos.]]></description>
			<content:encoded><![CDATA[<p>En versiones anteriores cada quien era responsable de organizar y estructurar sus aplicaciones, muchos nos encontramos en serios problemas y aprendimos sobre la marcha a base de cometer errores y aprender de los mismos.</p>
<p>Ext JS 4 intenta solucionar este problema y definir una arquitectura para que todos los desarrolladores (que así deseen hacerlo) escriban de la misma manera sus aplicaciones, uno de los principales beneficios de hacer esto es que podremos compartir código de una manera mucho más sencilla, además de que nuestro código esta mucho mejor organizado.</p>
<h3>Definiendo la aplicación</h3>
<p>Cuando iniciemos a desarrollar nuestro proyecto, lo primero que debemos realizar es crear una “aplicación”, esto es un concepto nuevo en Ext 4 y lo hacemos de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.application({
	name	: "Bleext",
	launch	: function(){
		console.log("Application created!");
	}
});
</pre>
<p>El código anterior creó una instancia de la clase “Ext.app.Application”, la configuración “name” define el nombre de la aplicación que estamos creando, este nombre lo debemos usar como el “namespace” para las clases que definamos.</p>
<p>Otro aspecto importante a considerar en el código anterior es que el contenido de la propiedad “name” se agrega al “path” del loader donde por defecto define el directorio “app” para alojar nuestras clases, internamente haría algo como esto:</p>
<pre name="code" class="javascript">
Ext.Loader.setPath(“Bleext”,”app”);
</pre>
<p>Si quisieramos cambiar la ubicación por defecto del directorio donde se lojarán nuestras clases tendríamos que definir la propiedad “appFolder” de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.application({
	name		: "Bleext",
	appFolder 	: "js/Bleext",
	launch		: function(){
		console.log("Application created!");

	}
});
</pre>
<p>Con la configuración anterior definimos que alojaremos nuestras clases en el directorio “js/Bleext”.</p>
<p>La función “launch” se ejecuta cuando el DOM está listo y cuando cuando se han cargado las clases necesarias para arrancar nuestra aplicación, dentro de esta función podríamos crear la instancia del viewport e inicializar toda la parte visual de nuestro proyecto.</p>
<h3>Event Bus</h3>
<p>Es importante mencionar que únicamente podemos tener una sola instancia de la clase “Ext.app.Application”, no debemos intentar crear más de una ya que tendremos resultados inesperados con respecto al manejo de eventos.</p>
<p>Internamente la clase “Ext.app.Application” sobre-escribe la manera como se disparán los eventos en los componentes y crea un “Bus” de eventos (Ext.app.EventBus) que estará escuchando absolutamente todos los eventos que sucedan en los componentes, esto para poder delegar las acciones correspondientes a determinado evento al controlador que lo solicite, en el siguiente tutorial veremos el método “control” y como utilizarlo desde un controlador para capturar los eventos de las vistas.</p>
<p>Ahora bien, para poder utilizar el patrón MVC que sencha nos ha propuesto forzosamente necesitamos crear una aplicación para luego usar los controlers que consultarán al “event bus” para la delegación de eventos.</p>
<h3>Conclusión</h3>
<p>Usar el paquete de “aplicaciones” de Ext 4 es de mucho beneficio, hoy vimos el primer paso para poder iniciar a escribir aplicaciones usando el patrón MVC, recuerden seguirnos en twitter para estar pendientes de nuestro siguiente tutorial que será acerca de los controladores y como interactuar con las vistas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/11/definiendo-aplicaciones-en-ext4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Carga de clases dinámicamente con ExtJS 4</title>
		<link>http://www.quizzpot.com/2011/10/carga-de-clases-dinamicamente-con-extjs-4/</link>
		<comments>http://www.quizzpot.com/2011/10/carga-de-clases-dinamicamente-con-extjs-4/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 05:21:43 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3048</guid>
		<description><![CDATA[Ext JS 4 introduce una manera muy sencilla de cargar clases bajo demanda, esto nos permitira optimizar la carga inicial de nuestra aplicación e ir cargando los módulos justo cuando el usuario los solicita.]]></description>
			<content:encoded><![CDATA[<p>Ext JS 4 introduce una manera muy sencilla de cargar clases bajo demanda, esto nos permitira optimizar la carga inicial de nuestra aplicación e ir cargando los módulos justo cuando el usuario los solicita.</p>
<p>Ya hablé acerca de <a href="http://www.quizzpot.com/2011/10/convenciones-de-nombres/">las convenciones que deberíamos seguir</a> para poder usar de una manera muy sencilla el Ext.Loader, el día de hoy mostraré cómo utilizarlo en nuestro propio proyecto.</p>
<h3>Configurar los Paths</h3>
<p>En primer lugar debemos definir el lugar donde estarán ubicadas nuestras clases, en lenguajes como Java existe algo denominado “classpath” en el cual existen las clases que creamos, en Ext4 existe un concepto semejante y para definir el “path” lo hacemos de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.Loader.setConfig({
	enabled	: true,
	paths	: {
		Bleext	: "js/Bleext"
	}
});
</pre>
<p>En el código anterior lo que hicimos es habilitar el Loader y asignarle un path, ahora bien cada que carguemos una clase cuyo namespace principal sea “Bleext”, entonces buscará el archivo dentro de la carpeta “js/Bleext”.</p>
<p>También podemos definir más paths, por ejemplo:</p>
<pre name="code" class="javascript">
Ext.Loader.setConfig({
	enabled	: true,
	paths	: {
		Bleext	: "js/Bleext",
		CRM	: "js/Crm"
	}
});
</pre>
<h3>Cargar clases dinámicamente</h3>
<p>Primero que nada vamos a crear la clase para después poderla cargar, si recordamos, una de las convenciones es que el nombre del archivo debe llamarse igual que la clase, además el archivo debe estar ubicado de acuerdo al namespace asignado, por lo tanto creamos un archivo en “js/Bleext/training/UsuarioPanel.js” y dentro definiremos la clase de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.UsuarioPanel",{
	extend		: "Ext.panel.Panel",

	title		: "User",
	width		: 300,
	height		: 250,

	initComponent	: function() {
		var me = this;

        me.html = "This is Jhon Doe!";

		me.callParent();
	}
});
</pre>
<p>La clase anterior extiende del panel y simplemente le agrega un título, dimensiones y contenido, realmente no hace nada útil pero nos servirá de ejemplo.</p>
<p>Lo siguiente es cargar la clase e instanciarla de la siguiente manera:</p>
<pre name="code" class="javascript">
//cargar la clase de manera dinámica
Ext.require("Bleext.training.UsuarioPanel");

Ext.onReady(function(){
	var john = Ext.create("Bleext.training.UsuarioPanel",{
		renderTo	: Ext.getBody()
	});

	john.center();
});
</pre>
<p>Este código va dentro del archivo app.js que creamos al inicio donde ya tenemos configurado el Loader con los paths.</p>
<p>Por último es necesario crear el HTML donde se incluye la librería de Ext4 y el archivo app.js que ya hemos creado.</p>
<pre name="code" class="html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot; /&gt;
	&lt;title&gt;ExtJS Loader&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; href=&quot;../common/js/Ext/resources/css/ext-all.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; title=&quot;no title&quot; charset=&quot;utf-8&quot;&gt;
	&lt;script src=&quot;../common/js/Ext/ext-all-dev.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

	&lt;script src=&quot;js/app.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Al ejecutar el ejemplo en el navegador veremos un lindo panel en el centro de la pantalla, como se muestra en la siguiente imágen.</p>
<p><!-- imagen 1 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/10/loader-01.png" alt="Loading dynamic class i ExtJS" /></p>
<p>Using the Loader</p>
</div>
<h3>Cargar solo las clases necesarias de Ext</h3>
<p>Hasta ahora hemos cargado la librería completa de Ext JS, pero muchas veces no utilizamos todos los componentes de la librería y quizás no vale la pena cargarla toda, para esos casos podemos cargar solo aquellos componentes que requerimos, para eso necesitamos utilizar el archivo “ext-dev.js” en lugar del “ext-all-dv.js”.</p>
<pre name="code" class="html">
&lt;!-- borramos esta linea en el HTML --&gt;
&lt;script src=&quot;../common/js/Ext/ext-all-dev.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- insertamos esta linea en el HTML --&gt;
&lt;script src=&quot;../common/js/Ext/ext-dev.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
</pre>
<p>El archivo ext-dev.js unicamente contiene las clases necesarias para cargar clases bajo demanda, además contiene algunas otras utilerías.</p>
<p>Si en este momento actualizamos el navegador donde tenemos el ejemplo nos ocurrirá un error, diciendonos que no puede cargar la clase correctamente “Failed loading &#8216;src/panel/Panel.js&#8217;, please verify that the file exists”.</p>
<p><!-- imagen 2 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/10/loader-02.png" style="width:590px" alt="Failed loading 'src/panel/Panel.js', please verify that the file exists" /></p>
<p>We need to set the correct path</p>
</div>
<p>Esto sucede porque necesitamos indicar el path donde se encuetra la librería, en este caso yo la tengo ubicada dentro de una carpeta que se llama “common/js/Ext”, ahi existe una carpeta llamada “src” donde están todas las clases separadas por archivo, es allí donde debemos apuntar para que la carga se realice correctamente, para eso modificamos el archivo “app.js” y agregamos el nuevo path de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.Loader.setConfig({
	enabled	: true,
	paths	: {
		Ext	: "../common/js/Ext/src",
		Bleext	: "js/Bleext",
		CRM	: "js/Crm"
	}
});
</pre>
<p>Ahora si veremos el ejemplo correctamente, y si abrimos la consola podremos ver todos los archivos que se han cargado de manera dinámica.</p>
<p><!-- imagen 3 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/10/loader-03.png" alt="Loading dynamic class i ExtJS" style="width:590px" /></p>
<p>Loading too many classes</p>
</div>
<p>Seguramente notarás que se ha renderizado más lento el panel cuando cargamos las clases de manera dinámica, esto es por que se están descargando varios archivos, lo ideal es crear una versión de Ext con sólo las clases que usamos y comprimirlo en un solo archivo para evitar descargar todas las clases por separado, esto sería lo ideal. Más adelante mostraré como crear la versión de Ext personalizada ya que eso requiere un tutorial por separado.</p>
<h3>Conclusión</h3>
<p>En este tutorial vimos como configurar el loader y cargar clases de manera dinámica, también se mostró como cargar las clases de la propia librería de Ext, es importante mencionar que esto es ideal para desarrollar, cuando se despliegue en producción es recomendable generar un solo archivo comprimido con la versión de Ext, así mismo hacer paquetes comprimidos donde vengan todas las clases de los módulos que contendrá nuestra aplicación, en futuros tutoriales hablaré más con respecto al Loader ya que faltan algunas otras cosas por cubrir.</p>
<p>Recuerda que si tienes dudas puedes <a href="http://foro.quizzpot.com">consultar el foro</a>, además recuerda seguirnos en <a href="http://twitter.com/quizzpot">twitter</a> y <a href="https://www.facebook.com/quizzpot">facebook</a> para estar al tanto de las actualizaciones y nuevos tutoriales.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/10/carga-de-clases-dinamicamente-con-extjs-4/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Convenciones de nombres</title>
		<link>http://www.quizzpot.com/2011/10/convenciones-de-nombres/</link>
		<comments>http://www.quizzpot.com/2011/10/convenciones-de-nombres/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 12:00:45 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3038</guid>
		<description><![CDATA[Ext JS 4 introduce un sistema de carga de archivos bajo demanda, algo que hacía mucha falta en las versiones anteriores, si necesitamos usar este nuevo sistema de carga de clases necesitamos seguir ciertas reglas y convenciones que nos harán la vida más sencilla.]]></description>
			<content:encoded><![CDATA[<p>Ext JS 4 introduce un sistema de carga de archivos bajo demanda, algo que hacía mucha falta en las versiones anteriores, si necesitamos usar este nuevo sistema de carga de clases necesitamos seguir ciertas reglas y convenciones que nos harán la vida más sencilla.</p>
<p>A continuación se listan las convenciones a tomar en cuenta cuando definimos una clase.</p>
<h3>Clases y archivos con el mismo nombre</h3>
<p>Cuando intentamos cargar una clase lo hacemos por su nombre, es por esto que es de suma importancia que tanto el nombre de la clase como del archivo sean idénticos. Es decir, si creamos una clase llamada “User” debemos crear un archivo llamado “User.js” donde este el código de la clase.</p>
<pre name="code" class="javascript">
// User.js
Ext.define("User",{
    name  : "John"
});
</pre>
<h3>Usar “Camel case” para los nombres de clases</h3>
<p>Se recomienda el uso de “camel case” para definir el nombre de las clases, esto nos permitirá fácilmente diferenciar entre una clase y un paquete, ej: User, Role, UserRole.</p>
<pre name="code" class="javascript">

Ext.define("UserView",{
    name  : "John",
    // ...
});

Ext.define("UserGrid",{
    name  : "John",
    // ...
});
</pre>
<h3>Espacio de nombres en minúsculas</h3>
<p>Los paquetes deberíamos nombrarlos en minúsculas para diferenciar fácilmente entre clases y paquetes: </p>
<pre name="code" class="javascript">

Ext.define("Bleext.users.controller.UserController",{
    // ...
});

Ext.define("CRM.security.groups.view.GroupsGrid",{
    // ...
});
</pre>
<h3>Paquetes como carpetas</h3>
<p>Normalmente cuando creamos una clase la definimos dentro de un “namespace” (si aún no lo haces: hazlo!!), se recomienda que por cada punto exista una carpeta física, por ejemplo, si tenemos una clase llamada “Bleext.users.controller.UserController” debería existir un archivo en la ruta “Bleext/users/controller/UserController.js”, esto es de suma importancia para que funcione correctamente el Loader.</p>
<pre name="code" class="javascript">
// Bleext/users/controller/UserController.js
Ext.define("Bleext.users.controller.UserController",{
    // ...
});

// CRM/security/groups/view/GroupsGrid.js
Ext.define("CRM.security.groups.view.GroupsGrid",{
    // ...
});
</pre>
<h3>Evitar uso de numeros en los nombres</h3>
<p>Se recomienda evitar el uso de número en los nombres de paquetes o clase, nombres como Users4Roles, Class2 y semejantes deberían ser evitados, procuremos asignar nombres con significado y debidamente empaquetados. Evitar el uso de acrónimos en las clases también es recomendable.</p>
<p>Pero siempre hay una excepción a la regla, ya que hay algoritmos como por ejemplo MD5 o SH4 que podemos usar para nombrar una clase, así mismo los acrónimos como Http pueden ser usados de ser necesario.</p>
<h3>Evitar el uso de guiones</h3>
<p>Se recomienda evitar usar el guión (_) para separar palabras en el nombre de una clase o paquete, User_Role, User_Grid son ejemplos de nombres que debemos evitar usar.</p>
<pre name="code" class="javascript">

//evitar esto
Ext.define("Bleext.users.controller.User_Controller",{
    // ...
});
</pre>
<p>Estás son convenciones, nadie está obligado a seguirlas pero si la seguimos podremos utilizar el Loader de una manera muy sencilla, en el siguiente tutorial hablaré al respecto, un tema muy interesante y útil para cargar dinámicamente clases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/10/convenciones-de-nombres/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configuraciones, Statics y Singleton en ExtJS</title>
		<link>http://www.quizzpot.com/2011/09/configuraciones-statics-y-singleton-en-extjs/</link>
		<comments>http://www.quizzpot.com/2011/09/configuraciones-statics-y-singleton-en-extjs/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 16:03:01 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3031</guid>
		<description><![CDATA[Como ya mencione en en tutoriales anteriores, Ext4 agrega nuevas funcionalidades a las clases de una forma muy simple haciendo usado de los pro/pre-procesadores, en este tutorial se explica como utilizar configuraciones, crear propiedades estáticas y definir una clase como Singleton.]]></description>
			<content:encoded><![CDATA[<p>Como ya mencione en en tutoriales anteriores, Ext4 agrega nuevas funcionalidades a las clases de una forma muy simple haciendo usado de los pro/pre-procesadores, en este tutorial se explica como utilizar configuraciones, crear propiedades estáticas y definir una clase como Singleton.</p>
<h3>Uso de configuraciones</h3>
<p>Es común que cuando creamos clases se definan configuraciones para estas, normalmente servirán para modificar el comportamiento de la clase o posiblemente para modificar el aspecto visual del componente.</p>
<p>En versiones anteriores, las configuraciones las definiamos como propiedades de la clase, y estas se sobre escribian cuando se creaba alguna instancia, en ExtJS 4 se ha introducido una propiedad llamada “config”, el cual es un objeto que esta pensado para alojar todas las configuraciones que se necesiten en una clase.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.desktop.User",{
	config	: {
		name	: "John",
		lastname: "Doe"
	},

	constructor	: function(options){
		this.initConfig(options);
	}
});
</pre>
<p>Dentro del objeto “config” podemos agregar cualquier cantidad de propiedades que serán usadas como configuraciones, esto nos permite mantener agrupadas las configuraciones mejorando la organización de nuestro código.</p>
<p>Otro aspecto importante es que en el constructor se están inicializando las configuraciones, mediante el parámetro “options” podemos inicializar las configuraciones para cada instancia que creamos.</p>
<pre name="code" class="javascript">
var john = Ext.create("Bleext.desktop.User",{
	name	: "Susan"
});

console.log(john.getName());

john.setName("Mary");

console.log(john.getName());
</pre>
<p>En el código anterior creamos una instancia de la clase “User” y sobre escribimos la configuración “name” asignandole “Susan”, más adelante podemos hacer uso de los getters y setters que se crean automáticamente para cada configuración, por ejemplo “getName” y “setName”.</p>
<h3>Definiendo propiedades y métodos estáticos</h3>
<p>Para definir una propiedad como estática únicamente es necesario usar la propiedad “statics” y asignarle un objeto con todos los métodos y propiedades que pertenecerán a la clase y no a la instancia.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.desktop.User",{
	config	: {
		name	: "John",
		lastname: "Doe"
	},
//Propiedades que se agregarán a la clase y no a las instancias
	statics		: {
		VISITANTE		: 1,
		USUARIO			: 2,
		ADMINISTRADOR	: 3
	},

	constructor	: function(options){
this.initConfig(options);
	}
});
</pre>
<p>En el ejemplo anterior definimos tres propiedades, estas propiedades existirán únicamente en la clase y no es necesario crear instancias para invocarlas.</p>
<pre name="code" class="javascript">
console.log(Bleext.desktop.User.VISITANTE);
console.log(Bleext.desktop.User.USUARIO);
console.log(Bleext.desktop.User.ADMINISTRADOR);
</pre>
<h3>Singleton</h3>
<p>Por definición una clase “singleton” es aquella que no se puede tener más de una instancia de la misma, en Ext JS 4 para definir una clase de este tipo basta con agregar la propiedad “singleton” igual a true.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.desktop.Constants",{
	singleton	: true,

	LOGIN_URL	: "/login.do",
	LOGOUT_URL	: "/logout.do",

	GET_USERS_URL	:  "/users/all",
	GET_USER_URL	: "/users/get"
});

console.log(Bleext.desktop.Constants.GET_USERS_URL);
</pre>
<p>La clase anterior no necesita ser instancia para poder usarse, basta con acceder a sus miembros directamente. Ahora bien, si por alguna razón quisieramos crear una instancia de esa clase recibiriamos un error al intentarlo.</p>
<pre name="code" class="javascript">
//'Bleext.desktop.Constants' is a singleton and cannot be instantiated
Ext.create("Bleext.desktop.Constants");
</pre>
<p>Esto sucede porque las clases singleton no se pueden instanciar por definición.</p>
<h3>Conclusión</h3>
<p>En este tutorial se describe brevemente tres características nuevas en el sistema de clases que introduce Ext4, vemos que es mucho más claro que en versiones anteriores realizar ciertas tareas (como clases singleton o configuraciones), normalmente los singleton se utilizan para manejar las “Constantes” de una aplicación o cualquier otra circustancia donde se requiera una sola instancia de una clase.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/configuraciones-statics-y-singleton-en-extjs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uso del Alias y xtype en Extjs4</title>
		<link>http://www.quizzpot.com/2011/09/uso-del-alias-y-xtype-en-extjs4/</link>
		<comments>http://www.quizzpot.com/2011/09/uso-del-alias-y-xtype-en-extjs4/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 13:00:09 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3013</guid>
		<description><![CDATA[La versión 4 de Ext JS nos proporciona varias opciones interesantes, la manera de definir el xtype de los componentes ha cambiado y se han agregado nuevas propiedades especiales, en este tutorial mostrare las nuevas características.]]></description>
			<content:encoded><![CDATA[<p>La versión 4 de Ext JS nos proporciona varias opciones interesantes, la manera de definir el xtype de los componentes ha cambiado y se han agregado nuevas propiedades especiales, en este tutorial mostrare las nuevas características.</p>
<h3>Definiendo el xtype</h3>
<p>Si has trabajado con la versión 3 de ExtJS ya sabrás lo que significa el xtype, pero en pocas palabras el xtype es un alias para definir componentes en de manera literal, por ejemplo:</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.Teacher",{
	extend 	: "Ext.panel.Panel",
	alias		: "widget.teacher"

	// ...
});
</pre>
<p>En la clase anterior usamos la propiedad “alias” para definir el xtype de la clase, a diferencia de Ext3 en esta versión se le asigna un prefijo, este prefijo es “widget” para el caso de cualquier clase que herede directa o indirectamente de “Ext.Component”, existen varios prefijos para los diferentes componentes que existen dentro del framework.</p>
<h3>Prefijos en el xtype</h3>
<p>Para identificar cuales prefijos están disponibles podemos ejecutar el siguiente código:</p>
<pre name="code" class="javascript">
var prefix = {},
	values = [];

Ext.Object.each(Ext.ClassManager.maps.aliasToName,function(key,value){
	var px = key.split(".")[0];

	if(!prefix[px]){
		prefix[px] = px;
		values.push(px);
	}
});
console.log(values);
</pre>
<p>La clase “ClassManager” es la responsable de la creación de clases, es por eso que aquí están definidos los “alias” de todas las clases que existen en el framework. El resultado del código anterior es lo siguiete:</p>
<pre name="code" class="javascript">
[layout,writer,data,reader,proxy,widget,axis,store,series,association,direct,state,formaction,feature,editing,plugin,selection]
</pre>
<p>Básicamente el prefijo sirve para agrupar las clases, de esta manera podemos tener un xtype “store.teacher” y otro “widget.teacher”, la diferencia es el prefijo.</p>
<h3>Creando la clase mediante su xtype</h3>
<p>Una vez definida la clase y asignado su alias con su respectivo prefijo, podemos instanciar la clase usando el xtype de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.onReady(function(){
var p = Ext.create("Ext.panel.Panel",{
	width	: 300,
	height	: 400,
	items	: [{
		xtype	: "teacher",	//Usando el xtype
		title 	: "John Doe",
		html	: "I'm a teacher!"
	}],
	renderTo	: Ext.getBody()
});
p.center();
});
</pre>
<p><!-- imagen 1 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/09/xtype-01.jpg" />
</div>
<p>Es importante notar que al instanciar la clase “Teacher” no estamos usando el prefijo, esto es porque hereda de “Ext.Component” (indirectamente) y todos los componentes utilizan el prefijo “widget” por lo tanto no es necesario usar el prefijo.</p>
<p>También podemos usar el método “widget” de la siguiente manera:</p>
<pre name="code" class="javascript">
var susan = Ext.widget("teacher",{
	title 	: "Susan Smith",
	html	: "I'm a teacher"
});
var p = Ext.create("Ext.panel.Panel",{
	width	: 300,
	height	: 400,
	items	: [{
		xtype	: "teacher",	//Usando el xtype
		title 	: "John Doe",
		html	: "I'm a teacher!"
	},
		susan  //agregamos la instancia susan al contenedor que ya teniamos
	],
	renderTo	: Ext.getBody()
});
</pre>
<p><!-- imagen 2 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/09/xtype-02.jpg" />
</div>
<h3>Conclusión</h3>
<p>Al definir un alias a la clase que escribimos podemos instanciarla más adelante con el alias que le asignamos, esto nos evita escribir algunas líneas extra de código y nos ayuda a definir los componentes más rápido.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/uso-del-alias-y-xtype-en-extjs4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herencia múltiple en Ext4 (mixins)</title>
		<link>http://www.quizzpot.com/2011/09/herencia-multiple-en-ext4-mixins/</link>
		<comments>http://www.quizzpot.com/2011/09/herencia-multiple-en-ext4-mixins/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 13:00:35 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=3002</guid>
		<description><![CDATA[Esta nueva versión (Ext4) ha sido escrita completamente nueva, pensando en ser muy flexible y fácil de aprender, una de las nuevas características que nos provee esta versión es que ahora podemos hacer herencia múltiple utilizando los mixins, en este tutorial veremos como hacer uso de los mixins y utilizarlos correctamente.]]></description>
			<content:encoded><![CDATA[<p>Esta nueva versión (Ext4) ha sido escrita completamente nueva, pensando en ser muy flexible y fácil de aprender, una de las nuevas características que nos provee esta versión es que ahora podemos hacer herencia múltiple utilizando los mixins, en este tutorial veremos como hacer uso de los mixins y utilizarlos correctamente.</p>
<p>Para definir los “mixins” simplemente escribimos la propiedad “mixins” dentro de nuestra clase, esta propiedad deberá ser un objeto con todas las clases de las que queramos heredar o mezclar.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.Icon",{
	mixins	: {
		floating		: "Ext.util.Floating",
		observable	: "Ext.util.Observable"
	}
	//......
});
</pre>
<p>En el ejemplo anterior creamos una clase llamada “Icon”, esta clase hereda directamente de “Ext.Base” ya que no le definimos explicitamente alguna otra clase, además le estamos indicando que “herede” de dos clases más, una de ellas es “floating” y “observable”.</p>
<p>La clase Floating contiene los métodos necesarios para posicionar un elemento en las coordenadas “X” y “Y” que nosotros le indiquemos a la instancia, mientras que la clase “Observable” nos permite manejar eventos dentro de la clase “Icon”.</p>
<p>Si en este momento creamos una instancia de “Icon” tendremos todos los métodos y propiedades de la clase “Ext.Base”, “Floating” y “Observable”.</p>
<h3>Sobre escribiendo el constructor</h3>
<p>Hasta ahora no hemos definido un constructor propio de la clase que hemos creado, así que la pregunta sería, ¿cuál constructor de las tres clases que estamos “heredando” se ejecutará cuando se este construyendo la instancia?</p>
<p>Para responder la pregunta anterior debemos entender que el “pre-procesador” (En otro tema hablare más a fondo sobre los pre/post-procesadores) de los mixins va copiando los métodos y propiedades SI dicho método o propiedad NO EXISTE en la clase destino.</p>
<p>De acuerdo al párrafo anterior entonces decimos que la clase “Icon” hereda el constructor de la clase “Base” mediante la herencia simple, esto significa que los constructores de “Floating” y “Observable” no se están ejecutando y seguramente los constructores de esas clases hacen cosas importantes.</p>
<p>Lo que necesitamos hacer es ejecutar los constructores de los mixins manualmente, esto lo hacemos de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.Icon",{
	mixins	: {
		floating	: "Ext.util.Floating",
		observable	: "Ext.util.Observable"
	},

	width	: 100,
	height	: 100,
	border	: true,

	constructor	: function(options){
		Ext.apply(this,options);

		this.id = Ext.id(null,"icon-");	//Asignando un Identificador dinámico

		this.addEvents("moved","created");	//método heredado de la clase Observable

		if(this.renderTo){
			this.render(this.renderTo);
			delete this.renderTo;
		}

		this.mixins.floating.constructor.call(this);	//ejecutando manualmente los
		this.mixins.observable.constructor.call(this);//constructores de los mixins
	}
});
</pre>
<p>Para acceder a las instancias de los mixins usamos la propiedad “this.mixins” seguido del nombre que le asignamos cuando lo configuramos.</p>
<p>Este mismo concepto se aplica cuando existan métodos con el mismo nombre en las diferentes clases de las que estamos heredando.</p>
<h3>Renderizando la clase Icon</h3>
<p>En el código anterior se ejecutaba el método “render” si la propiedad “renderTo” ha sido definida en los parámetros de configuración, es nuestro deber implementar este método.</p>
<pre name="code" class="javascript">
render		: function(where){
	if(where){
		this.container = Ext.get(where);			// 1
		this.el = Ext.core.DomHelper.append(where,{	// 2
			id	: this.id,
			tag	: "div"
		});
		this.el = Ext.get(this.el);
		this.el.setStyle({					// 3
			width	: this.width?this.width+"px":"auto",
			height	: this.height?this.height+"px":"auto",
			border	: this.border?"1px solid #aaa":"none",
			background	: "#eee"
		});
	}
},

setPagePosition	: function(xy){		// 4
	this.el.setLeftTop(xy[0]+"px",xy[1]+"px");
	this.fireEvent("moved",xy);
}
</pre>
<p>En el paso 1 se toma la referencia del elemento contenedor, esto mediante el método “Ext.get” que regresa una instancia del objeto “Ext.Element” el cual contiene la referencia al DOM y además varios métodos para manipularlo de una manera sencilla.</p>
<p>En el paso 2 se crea el elemento que representará a la clase “Icon”, usando la clase “Ext.DomHelper” podemos crear elementos DOM de una manera muy sencilla, en este caso usamos el método “append” para agregar un nodo al contenedor.</p>
<p>En el paso 3 aplicamos los estilos como width, height, etc. estos estilos pueden ser enviados mediante el objeto de configuración para cambiar los valores por defecto.</p>
<p>En el paso 4 se define una función para asignar las coordenadas del elemento que representa a la clase “Icon”, este método es requerido para usar el método “center” que heredamos de la clase “Floating”.</p>
<h3>Instanciando la clase Icon</h3>
<p>Hemos creado una clase que usa mixins, ahora vamos a probarla creando una instancia de esta y ejecutando alguno de los métodos heredados.</p>
<pre name="code" class="javascript">
Ext.onReady(function(){
	var icon = Ext.create("Bleext.training.Icon",{
		renderTo	: Ext.getBody()
	});

	icon.on("moved",function(xy){	//heredado de Observable
		console.log(xy);
	});

	icon.center();			//heredado de Floating
});
</pre>
<p>Al ejecutar el ejemplo verás un cuadrado en el centro de la pantalla, la funcionalidad de centrar el cuadrado no la hemos programado nosotros sino que la heredamos de la clase “Floating” la cual se encarga de calcular el centro.</p>
<p>También hemos usado el método “on” que ha sido heredado de la clase “Observable” y sirve para agregar eventos a las clases.</p>
<h3>Diferencia entre un mixin y plugin</h3>
<p>Decimos entonces que mediante los mixins podemos agregarle propiedades y métodos a una clase, pero, ¿eso no lo hacen los plugins? Así es, los plugins también hacen algo muy semejante, agregan funcionalidad extra a una clase.</p>
<p>La principal diferencia es que un mixin se agrega a nivel de clase y un plugin se agrega a nivel de instancia, esto significa que los mixins son parte de la definición de la clase, mientras que los plugins no.</p>
<h3>Conclusión</h3>
<p>Los mixins nos sirven para mezclar o agregar funcionalidad de otras clases a la clase que estamos definiendo, esto nos beneficia para poder diseñar de una manera más robusta y flexible nuestra aplicación.</p>
<p>Si tienes alguna duda puedes publicarla en el foro y entre todos resolverla, comentarios y sugerencias en el blog. Recuerda seguirnos en twitter y facebook.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/herencia-multiple-en-ext4-mixins/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Herencia simple</title>
		<link>http://www.quizzpot.com/2011/09/herencia-simple/</link>
		<comments>http://www.quizzpot.com/2011/09/herencia-simple/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 13:00:54 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=2971</guid>
		<description><![CDATA[Ext JS siempre se ha caracterizado por ser una librería orientada a objetos, desde las primeras versiones ha proveido un sistema de creación de clases y herencia, ente versión y versión ha venido cambiando un poco, pero en la versión 4 ha cambiado considerablemente todo el sistema de clases en Ext.]]></description>
			<content:encoded><![CDATA[<p>Ext JS siempre se ha caracterizado por ser una librería orientada a objetos, desde las primeras versiones ha proveido un sistema de creación de clases y herencia, entre versión y versión ha venido cambiando un poco, pero en la versión 4 ha cambiado considerablemente todo el sistema de clases en Ext.</p>
<p>Ya vimos como crear clases con el nuevo sistema, ahora estudiaremos la manera de como extender una clase para agregarle funcionalidad extra. Para extender una clase unicamente debemos definir la propiedad “extend” seguida de la clase de la cual queremos heredar.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.UserPanel",{
	extend 	: "Ext.panel.Panel",	//&lt;-- Herencia

	title 		: "User information",
	width		: 300,
	height		: 300,
	bodyPadding	: 10,
	html		: "Testing!"
});
</pre>
<p>Usando el método “Ext.define” estamos definiendo una clase la cual hereda de “Ext.panel.Panel”, al hacer esto automáticamente nuestra clase cuenta con todos los métodos y propiedades del panel, apartir de esto podemos configurar o especializar nuestra clase. En este caso solamente hemos agregado unas cuantas configuraciones, lo siguiente es crear una instancia de esa clase y renderizarla en algún lugar en nuestro documento.</p>
<pre name="code" class="javascript">
Ext.onReady(function(){
	Ext.create("Bleext.training.UserPanel",{
		renderTo	: "center"	//<-- DIV que definimos en el html
	});
});
</pre>
<p><!-- imagen 1 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/09/herencia-01.jpg" alt="Heredando de Ext.panel.Panel" />
<p>Heredando de Ext.panel.Panel</p>
</div>
<p>El método “Ext.onReady” (al igual que en la versión 3) ejecuta la función anónima que recibe como parámetro cuando el DOM esta listo, por lo tanto dentro de esta función creamos una instancia de la clase que recién hemos definido.</p>
<h3>Usando un template</h3>
<p>En Ext4 existe una propiedad que se llama “tpl”, la cual permite agregar una instancia de la clase Ext.XTemplate o bien una arreglo con los parámetros que recibirá la clase XTemplate para ser creada automáticamente, también podemos definir una propiedad “data” con la información que usará el template.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.UserPanel",{
	extend 	: "Ext.panel.Panel",	//&lt;-- Herencia

	title 		: "User information",
	width		: 300,
	height		: 300,
	bodyPadding	: 10,
	html		: "Testing!"

	data		: {
		name	: "John",
		lastname: "Doe",
		company	: "Bleext",
		age	: 27,
		status	: "Active",
		phone	: "(12) 34 567 890"
	},
	tpl		: [
		&#39;&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: {name} {lastname}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Company&lt;/strong&gt;: {company}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Age&lt;/strong&gt;: {age} years old&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Phone&lt;/strong&gt;: {phone}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Status&lt;/strong&gt;: {status}&lt;/p&gt;&#39;
	]
});
</pre>
<p><!-- imagen 2 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/09/herencia-02.jpg" alt="Usando un template para el contenido" />
<p>Usando un template para el contenido</p>
</div>
<p>Nótese como dentro del template definimos los campos del objeto “data” entre llaves “{“ y “}”, esto hará que los valores se remplacen dinámicamente dentro del HTML generado.</p>
<h3>Sobre escritura de métodos</h3>
<p>Es muy común que cuando desarrollamos orientado a objetos requiramos agregar funcionalidad extra a los métodos o especializarlos en alguna tarea específica de la clase que estamos definiendo. </p>
<p>Al sobre-escribir algún método debemos considerar que estamos eliminando el funcionamiento que se heredo, por lo tanto debemos llamar al método de la super clase para no perder nada. Ext JS 4 provee una forma muy sencilla de ejecutar algún método que se ha sobre-escrito, basta con ejecutar el método “callParent” y automáticamente la librería identifica el método correcto.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.UserPanel",{
	extend 	: "Ext.panel.Panel",	//<-- Herencia

	title 		: "User information",
	width		: 300,
	height		: 300,
	bodyPadding	: 10,

	data		: {
		name	: "John",
		lastname: "Doe",
		company	: "Bleext",
		age	: 27,
		status	: "Active",
		phone	: "(12) 34 567 890"
	},
	tpl		: [
		&#39;&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: {name} {lastname}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Company&lt;/strong&gt;: {company}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Age&lt;/strong&gt;: {age} years old&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Phone&lt;/strong&gt;: {phone}&lt;/p&gt;&#39;,
		&#39;&lt;p&gt;&lt;strong&gt;Status&lt;/strong&gt;: {status}&lt;/p&gt;&#39;
	],

	initComponent	: function(){
		var me = this;

		me.tbar = [{text:"Save"},{text:"Edit"},{text:"Delete"}]; //especializamos la subclase

		me.callParent();	//&lt;-- llamada al initComponent de la super clase
	}
});
</pre>
<p><!-- imagen 3 --></p>
<div class="example">
<img src="http://www.quizzpot.com/wp-content/uploads/2011/09/herencia-03.jpg" alt="Sobre escritura del método initComponent" />
<p>Sobre escritura del método initComponent</p>
</div>
<p>En el ejemplo anterior estamos sobre escribiendo el método “initComponent” para agregar un toolbar en la parte superior del panel, nótese como en la última línea se manda a llamar al método “initComponent” de la super clase, esto es de suma importancia ya que si no hacemos esta llamada el componente simplemente no funcionará, esto es porque en la super clase el “initComponent” hace varias cosas importantes.</p>
<p>En Ext3 existía una propiedad “superclass” que se le agregaba de manera estática a las clases, esto ha desaparecido y en su lugar usamos el método “callParent” que es lo suficientemente inteligente para saber cual método llamar en la super clase.</p>
<h3>Conclusión</h3>
<p>ExtJS fué creado para ser heredado, cuando desarrollamos nuestra propia aplicación haremos uso de la herencia simple para extender los componentes que la librería trae, en el ejemplo de hoy creamos una ficha de un usuario extendiendo la clase panel, también podemos extender cualquier otra clase del framework y especializarla por medio de la herencia simple.</p>
<p>Si tienes alguna duda puedes hacerla en <a href="http://foro.quizzpot.com">el foro</a>, recuerda seguirnos en <a href="http://twitter.com/quizzpot">twitter</a> y <a href="http://facebook.com/quizzpot">facebook</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/herencia-simple/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Curso de ExtJS 4</title>
		<link>http://www.quizzpot.com/2011/09/curso-de-extjs-4/</link>
		<comments>http://www.quizzpot.com/2011/09/curso-de-extjs-4/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 13:00:37 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Carousel]]></category>
		<category><![CDATA[Courses]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=2983</guid>
		<description><![CDATA[Ya hace un par de meses que ha salida la nueva versión de Ext JS, al día de hoy todavía hay muy poca documentación, ejemplos y tutoriales, es por eso que en Quizzpot hemos decidido iniciar un curso completo para todos aquellos que se inicia por primera vez con el framework, además si ya has trabajando con versiones pasadas también iremos viendo algunas diferencias.]]></description>
			<content:encoded><![CDATA[<p>Ya hace un par de meses que ha salida la nueva versión de Ext JS, al día de hoy todavía hay muy poca documentación, ejemplos y tutoriales, es por eso que en Quizzpot hemos decidido iniciar un curso completo para todos aquellos que se inicia por primera vez con el framework, además si ya has trabajando con versiones pasadas también iremos viendo algunas diferencias.</p>
<p>El objetivo de este curso es mostrar la manera como integrar los componentes, irá enfocado a arquitectura con ejemplos más aterrizados y prácticos, los tutoriales no se enfocarán tanto en configuraciones y componentes, más bien irá enfocado a la manera como se integran y comunican entre ellos.</p>
<h3>Introducción</h3>
<p>• <a href="http://www.quizzpot.com/2011/09/curso-de-extjs-4/">Presentación del curso (Temario)</a><br />
• <a href="http://www.quizzpot.com/2011/09/instalacion-de-ext-js-4/">Instalación del framework</a></p>
<h3>Sistema de clases</h3>
<p>• <a href="http://www.quizzpot.com/2011/09/creacion-de-clases/">Creación de clases</a><br />
• <a href="http://www.quizzpot.com/2011/09/herencia-simple/">Herencia simple</a><br />
• <a href="http://www.quizzpot.com/2011/09/herencia-multiple-en-ext4-mixins/">Herencia múltiple (Mixins)</a><br />
•  <a href="http://www.quizzpot.com/2011/09/uso-del-alias-y-xtype-en-extjs4/">Definición del Alias y xtype</a><br />
• <a href="http://www.quizzpot.com/2011/09/configuraciones-statics-y-singleton-en-extjs/">Configuraciones, Estáticos y Singleton</a></p>
<h3>Loader</h3>
<p>• <a href="http://www.quizzpot.com/2011/10/convenciones-de-nombres/">Convención de nombres y archivos</a><br />
• <a href="http://www.quizzpot.com/2011/10/carga-de-clases-dinamicamente-con-extjs-4/">Carga de clases dinámicamente con ExtJS 4</a></p>
<h3>Paquete de datos</h3>
<p>• Model<br />
• Proxys<br />
• Readers<br />
• Writers<br />
• Associations<br />
• Validations<br />
• Store<br />
• Sorters, Filters y Grouping</p>
<h3>DataView</h3>
<p>• Template y XTemplate<br />
• Desplegar información en un DataView</p>
<h3>Arquitectura MVC</h3>
<p>• <a href="http://www.quizzpot.com/2011/11/definiendo-aplicaciones-en-ext4/">Definiendo aplicaciones con Ext</a><br />
• <a href="http://www.quizzpot.com/2011/11/modelos-vistas-y-controladores-en-ext-js-4/">Modelos, Vistas, Controladores</a><br />
• ComponentQuery y los Selectores</p>
<h3>Desktop con CodeIgniter</h3>
<p>• Instalación del Bleextop<br />
• Características<br />
• Apis disponibles<br />
• Seguridad<br />
• Utilizar el desktop con otra tecnología (Java, Grails, Ruby, Phyton, etc&#8230;)</p>
<h3>Sistema de ejemplo: Bug traking</h3>
<p>• Módulo de usuarios<br />
• Módulo de equipos<br />
• Módulo de proyectos<br />
• Módulo de componentes asociados a proyectos<br />
• Módulo de versiones<br />
• Módulo de &#8220;issues&#8221;<br />
• Dashboard con reportes</p>
<p>Al día de hoy ya tengo algunos tutoriales listos, estos se irán publicando cada dos días, así que sigue visitandonos frecuentemente o bien seguirnos en <a href="http://twitter.com/quizzpot">twitter</a> o <a href="http://facebook.com/quizzpot">facebook</a> para estar al tanto de las actualizaciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/curso-de-extjs-4/feed/</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>Creación de clases</title>
		<link>http://www.quizzpot.com/2011/09/creacion-de-clases/</link>
		<comments>http://www.quizzpot.com/2011/09/creacion-de-clases/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 13:00:18 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=2957</guid>
		<description><![CDATA[Ext4 define una nueva forma de crear clases, a mi parecer ahora es mucho más sencillo y claro de entender el funcionamiento, además de que con los nuevos pre-processors y post-processsors nos habren muchas posibilidades para la creación de nuestras clases.]]></description>
			<content:encoded><![CDATA[<p>Ext4 define una nueva forma de crear clases, a mi parecer ahora es mucho más sencillo y claro de entender el funcionamiento, además de que con los nuevos pre-processors y post-processsors nos abren muchas posibilidades para la creación de nuestras clases.</p>
<h3>Definición de una clase</h3>
<p>Para crear una clase sencilla basta con utilizar el método “Ext.define” o “Ext.ClassManager.create” de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.define(Nombre,Configuraciones,Callback);
Ext.ClassManager.create(Nombre,Configuraciones,Callback);
</pre>
<p>El primer parámetro define el nombre de la clase y debe ser un String.<br />
El segundo parámetro define los miembros de la clase y debe ser un objeto con todas las propiedades y métodos que necesitemos en la nueva clase.<br />
El tercer parámetro define una función (opcional) que se ejecuta cuando la clase se ha creado, esto es útil para cuando creamos clases que tienen que ser incluidas asíncronamente usando el Loader.</p>
<p>A continuación un ejemplo de la creación de una clase llamada User:</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.User",{
username	: "",
password	: "",

login		: function(){
	console.log("Loging in....");
},

logout		: function(){
	console.log("Loging out....");
}
});
</pre>
<p>Hemos creado una clase en el namespace “Bleext.training” llamada “User”. A diferencia de Ext3, ahora definiremos el nombre y el namespace en el primer parámetro y ya no es necesario utilizar el tradicional Ext.ns que utilizabamos en la versión 3.</p>
<p>En el segundo parámetro es un objeto con dos propiedades y dos métodos, aquí podríamos definir lo que necesitemos.</p>
<h3>Sobreescribiendo el contructor</h3>
<p>En el ejemplo anterior no definimos un constructor de la clase, por lo tanto Ext le asigna un constructor vacio, si quisieramos definir uno tendríamos que usar la propiedad “constructor” de la siguiente manera.</p>
<pre name="code" class="javascript">
Ext.define("Bleext.training.User",{
username	: "",
password	: "",

constructor	: function(options){
	Ext.apply(this,options || {});

	console.log("A new user!");
}

login		: function(){
	console.log("Loging in....");
},

logout		: function(){
	console.log("Loging out....");
}
});
</pre>
<p>La propiedad “constructor” es una configuración especial que  (al igual que en Ext3) nos permite definir la función con la que se construirá el objeto que estamos definiendo, en este caso una llamada al metodo “Ext.apply” que únicamente copia el contenido del objeto “options” a la instancia que se creará, esto nos da la posibilidad de que a la hora de crear la instancia le asignemos valores a las propiedades definidas.</p>
<h3>Creación de la instancia</h3>
<p>Una vez que tenémos definida la clase podemos generar objetos a partir de esta, para eso es necesario invocar al método “Ext.create” o bien el método “Ext.ClassManager.instantiate” de la siguiente manera:</p>
<pre name="code" class="javascript">
Ext.create(Clase,Opciones);
Ext.ClassManager.instantiate(Clase,Opciones);
</pre>
<p>Ambos métodos hacen exactamente lo mismo, el primer parámetro define la clase que se requiere instanciar (String) y el segundo parámetro es un objeto con las configuraciones que se le aplicarán a la instancia, por ejemplo:</p>
<pre name="code" class="javascript">
var john = Ext.create("Bleext.training.User",{
	username	: "john",
	password	: "123"
});

console.log(john);
</pre>
<p>Al mandar imprimir a consola el objeto “john” veremos como las propiedades originales se sobre-escribieron con las configuraciones que le asignamos al crear la instancia.</p>
<h3>Convenciones</h3>
<p>No es una regla, pero si una convención nombrar la clase siguiendo el formato “camel case”, es decir de la siguiente manera:</p>
<pre name="code" class="javascript">
UserPanel, UserGrid, UserForm, UserStore
</pre>
<p>También existe otra convención que nos recomienda escribir en “camel case” el objeto “raiz” de nuestro “namespace” y todos los paquetes en minúscula, de esta manera podremos diferenciar fácilmente entre clases y paquetes, por ejemplo:</p>
<pre name="code" class="javascript">
Bleext.modules.security.roles.controller.Roles
Bleext.modules.security.roles.model.Role
Bleext.modules.security.roles.store.Roles
Bleext.modules.security.roles.view.RolesGrid
Bleext.modules.security.roles.view.RolePanel
</pre>
<p>Los anteriores son ejemplos de como se recomienda definir el nombre de nuestras clases, nótese cuan sencillo es diferenciar los “paquetes” de las clases.</p>
<h3>Análisis del funcionamiento</h3>
<p>Si lo notaste el objeto Ext.ClassManager es el responsable de la creación y manejo de las clases dentro del framework, este objeto hace varias cosas interesantes y vale la pena analizarlo a fondo para entender su funcionamiento.</p>
<p>En primer lugar cuando cuando creamos una clase usando “Ext.define” se realiza una llamada al método “Ext.ClassManager.create” el cual internamente crea una instancia de la clase “Ext.Class”, esto significa que todas las clases que definimos son instancias de “Ext.Class”.</p>
<p>Ext.Class define un proceso a la hora de instanciar las clases, en este proceso se ejecutan dos principales fases, la de “pre-procesamiento” y “post-procesamiento”, básicamente en estas fases podemos agregarle acciones, por defecto ya vienen varias, en la fase de pre-procesamiento encontramos las siguientes acciones:</p>
<pre name="code" class="javascript">
extend,statics,inheritableStatics,mixins,config
</pre>
<p>Estas acciones permiten ejecutar porciones de código antes de que se cree la clase en manera secuencial, por ejemplo la acción “extend” lo que hace es copiar los prototipos de la superclase para realizar la herencia, la acción “statics” define de manera estática las propiedades o métodos que nosotros le definimos a la nueva clase y así sucesivamente se ejecutan los pre-procesadores de manera secuencial.</p>
<p>Más adelante en este mismo curso veremos a detalle cada una de esas acciones y como podemos agregar nuestros propios procesos.</p>
<p>Otro punto interesante es que por defecto (si no lo definimos) las clases que creamos heredan de la clase Ext.Base, esta clase define el funcionamiento abstracto para todas las clases, métodos como “callParent”, “initConfig” los podemos encontrar aquí, más adelante hablaremos a detalles de esto, pero es importante conocer que todas las clases heredan de “Ext.Base” ya sea directamente (si no definimos un super clase específica) o indirectamente (si heredamos de una clase ya existente).</p>
<h3>Conclusión</h3>
<p>Como hemos visto el sistema de clases esta muy completo y flexible, además la sintaxis para la creación de clases es bastante entendible, más adelante comenzaremos a ver más características del uso de clases como son los “mixins”, “configs”, “statics”, etc.</p>
<p>Si tienen alguna duda pueden <a href="http://foro.quizzpot.com">consultar el foro</a> y entre todos resolverla, los comentarios en el blog también son bien recibidos, no olviden compartir el artículo en twitter y sus redes favoritas, esto nos ayuda  y nos anima a seguir compartiendo estos tutoriales de manera gratuita.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/creacion-de-clases/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Instalación de Ext JS 4</title>
		<link>http://www.quizzpot.com/2011/09/instalacion-de-ext-js-4/</link>
		<comments>http://www.quizzpot.com/2011/09/instalacion-de-ext-js-4/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 13:00:56 +0000</pubDate>
		<dc:creator>Crysfel</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Ext4]]></category>

		<guid isPermaLink="false">http://www.quizzpot.com/?p=2963</guid>
		<description><![CDATA[Como muchos ya se han enterado, Sencha (la compañia detras de ExtJS) ha liberado la versión 4 del framework hace un par de meses, si has venido trabajando con versiones anteriores notarás muchas diferencias, en este tutorial mostraré como instalar la versión 4 de ExtJS.]]></description>
			<content:encoded><![CDATA[<p>Como muchos ya se han enterado, Sencha (la compañia detras de ExtJS) ha liberado la versión 4 del framework hace un par de meses, si has venido trabajando con versiones anteriores notarás muchas diferencias, en este tutorial mostraré como instalar la versión 4 de ExtJS.</p>
<h3>Adios al adapter</h3>
<p>Para los que hemos estado desarrollando desde la versión 1 ya bien sabemos que Ext JS nace como una extensión de YUI, más adelante se introduce prototype, jQuery y el base, para hacer funcionar la librería con alguna de estas cuatro era necesario importar el adapter para que sirviera de “interprete” entre Ext y la librería seleccionado (jQuery por ejemplo).</p>
<p>Para la versión 4 esto ha cambiado, ya no es necesario importar dicho adaptador, de hecho Ext ya no es una extensión de ninguna otra librería y los desarrolladores de Sencha han decidido soportar únicamente el Ext Core que es una librería semejante a jQuery o Prototype, esta decisión fue tomada para que Sencha Touch (librería para móviles) compartiera código con ExtJS 4, además de varias otras ventajas.</p>
<h3>Bienvenido Ext Dev</h3>
<p>Al descargar la versión 4 te encontrarás con varios archivos en el directorio raíz, ext-all.js, ext-all-debug.js, ext-all-dev.js, ext.js,ext-dev.js</p>
<p>El archivo ext-all.js al igual que en las versiones pasadas contiene todas las clases de la librería comprimidas y listas para subir al ambiente de producción.</p>
<p>En el archivo ext-all-debug.js las clases están descomprimidas y es el archivo que usabamos en las versiones anteriores para el ambiente de desarrollo.</p>
<p>En esta nueva versión encontramos el ext-all-dev.js, este archivo también contiene todo el framework pero además contiene mensajes de error y warning que nos servirán en la fase de desarrollo, así que de ahora en adelante deberíamos usar este para desarrollar.</p>
<p>También encontraremos el archivo ext-dev.js y ext.js, estos archivos están pensados para cuando no requieres cargar toda la librería y simplemente deseas usar algún componente en específico, entonces estos archivos solo cargan lo básico para poder cargar dinámicamente unicamente las clases que se requieran, más adelante trataremos esto a detalle.</p>
<h3>Ejemplo de instalación</h3>
<p>Para instalar la librería en ambiente de desarrollo es necesario importar el “ext-all-dev”, también requerimos importar los estilos para que se visualicen correctamente los componentes. El HTML quedaría de la siguiente manera:</p>
<pre name="code" class="html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot;&gt;
    &lt;title&gt;Ext.Panel&lt;/title&gt;
    &lt;!-- Importar los estilos --&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../js/Ext/resources/css/ext-all.css&quot; /&gt;

    &lt;!-- Importar el ext-all-dev.js --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;../js/Ext/ext-all-dev.js&quot;&gt;&lt;/script&gt;

    &lt;script type="text/javascript" &gt;
        Ext.onReady(function(){
            alert("Ext esta instalado correctamente!");
        });
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;center&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Asegurate de asignar bien las rutas del CSS y del JS, la estructura de folders en este ejemplo esta de la siguiente manera:</p>
<pre>
+ curso
   + classes
      - 01-instalacion.html
   + js
      + Ext
         - ext-all-dev.js
      + resources
         + css
            - ext-all.css
</pre>
<p>Si al ejecutar el ejemplo en el navegador te sale un error diciendote que “Ext is undefined” seguramente la ruta al archivo “ext-all-dev.js” está incorrecta, asegurate de ponerla bien.</p>
<p>Si no te sale ningún error pero no se ven bien los componentes es posible que la ruta del CSS esté incorrecta, asegurate de que esté escrita correctamente y en la ruta correcta.</p>
<h3>Conclusión</h3>
<p>Iremos publicando tutoriales de Ext4 con mayor frecuencia, sigue pendiente vía <a href="http://feeds2.feedburner.com/quizzpot-es">RSS</a>, <a href="http://twitter.com/quizzpot">Twitter</a> o <a href="https://www.facebook.com/quizzpot">Facebook</a>, además recuerda compartir estos tutoriales en tus redes sociales favoritas, esto nos ayuda a seguir publicando más contenido de manera gratuita.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quizzpot.com/2011/09/instalacion-de-ext-js-4/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

