Programación

13º Post: Programación – Francisco Cabezas (@fcocabezas)

“Cosas que hubiese querido saber de jQuery”

Nota: este post no es una traducción, pero se basa en un artículo que se publicó cuando yo trabajaba en algo similar.

Para quién no sepa aún qué es jQuery o qué hace, por favor leer los dos artículos anteriores publicados en este blog en la sección programación.

Es común que al aprender y utilizar una nueva herramienta, nos demos cuenta de errores que cometemos en el proceso de aprendizaje. muchas veces esto se amplifica en el ámbito de la programación, dado los estilos y paradigmas que el programador ya tiene en su mente al enfrentar una nueva herramienta que necesite de nuevos paradigmas.
Los puntos declarados a continuación, son algunos aspectos que hubiese querido saber al comenzar a utilizar jQuery. Algunos de ellos hbiesen ahorrado varias horas de investigación y trabajo.

Punto de partida común: Objetos y métodos

jQuery es un herramienta desarrollada en javascript. A su vez, javascript tiene una aproximación a la metodología de orientación a objetos.
Aunque no fue mi caso, mucha gente pretende utilizar jQuery sin conocer la orientación a objetos. Por favor visite wikipedia en el lenguaje que mejor conozca y busque información acerca de lo que significa Orientación al Objeto (OO), es decir, Hágalo Usted Mismo.

Si no, vale decir que un método es una función que pertenece a un objeto. Y qué es un objeto? Un objeto es una abstracción tal cual la conocemos en la vida real, pero llevada a la programación. Supongamos que vamos a tener un objeto llamado auto, y que el objeto auto tiene ruedas y motor y una función encender motor (encenderMotor). Este objeto puede ser escrito en javascript como:

auto= function(){

	var this.ruedas = 4;
	var this.motor = false;

	var encenderMotor=function(){
		this.motor=true;
	};
}

Donde, para encender basta con ejecutar el método auto.encenderMotor() quien cambiará el valor de la variable motor a true.

Este concepto de objeto, compuesto por variables y métodos, es una de las bases de jQuery y de los plug-ins.

Chainability

Javascript, por lo tanto jQuery también, permite encadenar el llamado de métodos. Por ejemplo, si se tiene este código jQuery:

var testText = $(‘div#test’).parent().text();

y además se tiene el siguiente código html:

<div id=“test”>This is the content!</div>

Al ejecutar el código jQuery, este retornará primero al elemento padre del div con id=test y luego retornará el texto de dicho elemento. Es decir, la variable testText contendrá un String que en algún lugar contendrá “This is the content!”.

Cabe señalar que no todo es encadenable. Ejemplo de esto es invertir la llamada de .parent() y de text(). Si se ejecuta primero la función text(), está retornará un String, y el objeto String no tiene una función parent(), por lo que se generará un error.

jQuery siempre devuelve un arreglo

Este principio es uno de los más importantes de jQuery. La ejecución de un selector de jQuery, siempre retorna un arreglo, incluso si el selector no hace match, en cuyo caso retorna un arreglo vacío. Para un ejemplo mirar esto:

<div id="wrapper">
<div>Content #1!</div>
<div>Content #2!</div>
<div>Content #3!</div>
<div>Content #4!</div>
</div>
<div id="wrapper2">
<div class="box">Content2 #1!</div>
</div>
*/
// returns 4
$('#wrapper .box').length;
// num is equal to 4
var num = $('#wrapper .box');
num = num.length;
// text is equal to 'Content #2!'
var text = $("#wrapper .box")[1];
// text is equal to 'Content #1'
var text = $("#wrapper .box")[0];
// text is equal to 'Content2 #1'
var text = $("#wrapper2 .box")[0];

jQuery en una variable

A veces es necesario contener la respuesta de un selector de jQuery en una variable para no volver a realizar la búsqueda y ahorrar tiempo. Para esto basta con guardar el objeto(arreglo) retornado. Ejemplo de esto:

var testBox = $('#test');

// the variable testHTML is equal to the content's of '#test'

var testHTML = testBox.html();

Que significa callback?

Un callback es una función o el nombre de una función que se ejecuta una vez terminada la función que originalmente fue llamada.

wtf-is-callback

Ejemplo de esto:

function makeAlert () {

 $(this).html('Ran this function!');

}

// both lines do the same thing

$('#test').slideUp(400, makeAlert);

Donde este código busca cambiar el contenido del div cuyo id es igual a “test” con el mensaje “Ran this function!” una vez realizado el slideUp del div. Cabe señalar que this es el elemento DOM que retorna el selector de jQuery. El siguiente código hace algo similar pero con una función anónima:

$('#test').slideUp(400, function () {

 $(this).html('Ran the anonymous function!');

});

No puedo ver los elementos de un iFrame/Frame

Un problema común al utilizar jQuery es la imposibilidad con algunos browsers para poder “ver” con los selctores, los elementos de un frame o iframe, esto, porque usualmente en toda la documentación se utiliza la función

$(document).ready(function(){ /* aqui va tu codigo*/ });

para disparar lo que deseamos hacer con jQuery.
Consejo, intentalo con
$(window).ready(function(){ /* aqui va tu codigo*/ });

que va a esperar que la ventana este completamente lista para ejecutar el código de nuestro interés.

Finalmente: los selectores

Un punto importante a considerar cuando se utiliza jQuery es el uso de los selectores, si bien, funcionan, no todos lo hacen en el mismo tiempo.
Es recomendable realizar siempre la busqueda :

1. por id, ej: $(”#miDiv”), si esto no es posible,
2. intentar búsquedas por elementos del DOM, ej: $(”div input”)
3. Y si no hay ninguna otra posibilidad, selecionar por clases (CSS), ej: $(”.myClass”).

Esto se debe a que la busqueda por Id aprovecha la función de javascript getElementById, que es sumamente eficiente.
LA razón por la cual la tercera opción es más lenta, es decir, en el caso de la búsqueda tipo $(”.myClass”), es porque jQuery debe recorrer todo el DOM, y por cada elemento del DOM verificar que dicho elemento tenga la clase “myClass” en su atributo “Class”.

8º Post: Programación – Francisco Cabezas (@fcocabezas)

Hoy tenemos un nuevo post de Programación que nos escribe nuestro vecino Francisco Cabezas (@fcocabezas) desde Chile. Muy interesante y útil post para todos los usuarios y fanáticos!

NO SE LO PIERDAN!

“13 plug-ins/tutoriales recomendables usando jQuery”

En nuestro primer post se hizo una introducción a jQuery que en su forma más práctica, osea, para quienes no programan no tiene una utilidad final muy clara.

Para ayudar en la visibilidad de para que sirve jQuery podriamos decir que lo utiliza Google, Dell o Wordpress.

img1

Claramente estos sitios son buenos ejemplos de la utilidad de jQuery y lo que se puede lograr con buenas prácticas de programación. Pero para ser más entretenidos y útiles para quienes quieren hacer un nuevo sitio utilizando esta herramienta, es mucho más útil conocer lo que puede lograr con algunos plug-ins. A continuación una muestra.

Galería fotográfica

Galleria es como dice su nombre, una galería de imágenes escrita en jQuery. Permite cargar las imágenes de una lista no ordenada, desplegando miniaturas que al ser seleccionadas muestran la imagen en mayor tamaño. El efecto de “loading” es muy elegante. Para verlo en acción usa este demo.

img2

Panel de Login dinámico

Esto no es estrictamente un plug-in pero clasifica por su utilidad, ya que es un panel de login que se oculta o muestra según la necesidad, lo que maximiza la superficie disponible para el sitio en cuestión. Quienes han desarrollado un portal con anterioridad agradecerán esta funcionalidad. Para verlo en acción, usa este demo.

img3

FormToWizard: Un Formulario con esteroides

FormToWizard permite hacer de un formulario un verdadero wizard. Para verlo en acción usa este demo.

img4

jNice

jNice es un artilugio permite hacer de un formulario, un elemento gráfico independiente del browser en que se vea. Cuántas veces un cliente te ha preguntado porque el botón del formulario es tan feo? Para verlo en acción usa este demo.

img5

Ingrid

Ingrid permite dar funcionalidad de grilla a una tabla. Ordenar por columnas, cosa de niños. Para verle en acción usa este demo.

img6

jQuery checkbox

Este plug-in permite darle el look & feel de los checkbox tipo iPhone a los checkbox de tu formulario. Deseas verlo? Usa este demo.

img7

jQplot

jQplot es el plug-in por excelencia para realizar gráficos on the fly. Esta tecnología no usa imágenes, sino que dibuja usando “canvas”. Dado que IE no soporta canvas, existe el respectivo parche. Para verlo en acción, se pueden aburrir con la página de ejemplos.

img8

Uploadify

Uploadify permite crear formularios de subida de archivos con un look & feel elegante y una usabilidad agradable para el usuario de nuestra página, entre otras cosas, barra de progreso y soporte para subir varios archivos. Obsérvalo en acción en este demo.

img9

Ajax Fancy Captcha

Este plug-in es una excelente solución para proteger los formularios de robots y spammers, bueno, bonito y barato. Su respectivo demo está inserto en la página del plug-in.

img10

Tooltip mejorados

Muchas veces es necesario darle un toque mas humano a los elementos con los que se enfrenta el usuario en nuestra página. Uno de esos toques se puede lograr con tooltips de ayuda.

Míralo en acción en este demo.

img11

Password Strength

Si quieres que tus usuarios puedan saber lo fuerte de sus password, este artilugio será un dulce para ellos. La idea del plug-in es mostrar cuanto tiempo tomaría descifrar la clave por fuerza bruta. El demo está inserto en la página del plug-in.

img12

SexyDropDownMenu

SexyDropDownMenu es una solución para hacer un menú totalmente operativo y ajustable para cada diseño. Para verle actuar, aquí está el demo.

img13

jQDock con esteroides

Y para dejarles sin aire a los amantes de la usabilidad de Mac OS X, aquí les dejo este candy. Sin comentarios.

img14

Finalmente

Es de esperar que este largo, pero gráfico artículo le sirva tanto a diseñadores, programadores y CEO’s para saber cuanto más pueden lograr usando jQuery haciendo de sus sitio una experiencia gratificante, de modo que el usuario vuelva, y lo que es mejor, haga correr la voz a favor nuestro.

3º Post: Programación – Francisco Cabezas (@fcocabezas)

Hoy tenemos la oportunidad de presentar a Francisco Cabezas (@fcocabezas) que nos escribe desde el país vecino Chile! Está muy felizmente casado y es padre de dos hijos. Con este post va a estar inaugurando la categoría Programación y luego de éste nos estará presentando dos títulos más: “10 plug-ins recomendables” y “Cosas que hay que saber de jQuery”

AHORA SI! DISFRUTEN DEL ARTÍCULO!

¿Por qué usar jQuery?… ¿Para hacer qué?

jquery

Primero, ¿qué es jQuery?

Lo que dice el sitio web de jQuery es que es una librería de Javascript que persigue:

• recorrer documentos HTML,
• manejar eventos,
• animación, y
• interactuar con Ajax,

todo esto para conseguir un desarrollo de sitios web rápido con un buen soporte para distintos navegadores. Pero esto no es todo, porque además prometen un cambio en la forma de escribir en Javascript y, es verdad.

El primer concepto importante para entender es que jQuery funciona a base de selectores. La función básica de jQuery retorna un arreglo con los elementos que hacen match con el selector.

Ej:
$(”.myClass”) retorna todos los elementos que tienen una clase myClass.
$(”input”) retorna todos los elementos tipo input.
$(”#myId”) retorna un arreglo con el elemento cuyo id es myId, siempre que este exista.

Por supuesto, se pueden hacer selectores con combinaciones variadas. Se puede consultar un detalle en http://docs.jquery.com/Selectors.

¿Por qué un arreglo de elementos?

Una buena forma de entender la potencia de los selectores es a través de ejemplos. Supongamos el siguiente código:

$(”input”).addClass(”highlight”)

Con esto, se agregará la clase highlighta todos los elementos tipo input.
Pero, esto no es una super característica. Déjenme agregar algo de código a la línea anterior:

$(”input”).filter(”:checkbox”).addClass(”highlight”)

Con este código, podemos aplicar la clase highlight sólo a los elementos tipo input que sean checkboxes. Quizás tu puedas pensar que esto no representa una real ganancia porque esto mismo se puede hacer al escribir el HTML respectivo, pero déjenme agregar algo más:

$(”input”).filter(”:checkbox”).bind( ‘focus’ , function ()
{
$(this).addClass(”highlight”);
});

Este código selecciona todos los elementos tipo input, filtra sólo los que son checkboxes, y por cada uno de ellos asocia el evento “focus” una función anónima que agregará la clase “highlight” cuando el elemento tenga el foco. Intente hacer los mismo sólo con javascript. Esto si es un avance real. Existen un montón de eventos para manejar.Para una lista completa visitar http://docs.jquery.com/Events.
Además, tu puedes cambiar/animar/manejar cualquier contenido de cualquier elemento del DOM.
Por supuesto, cuando se usa AJAX, se puede desarrollar el sitio que desees, atractivo, fresco y sencillo para el usuario final.

Pero, aún escribo mucho código ¿por qué insistir?

He aquí donde está el real poder de jQuery. La última versión mejoró enormemente la arquitectura de plug-in. Esta característica permite conseguir/desarrollar/adaptar un montón de código que ya existe para usarlo.
Por ejemplo, puedes visitar el sitio web de UI http://jqueryui.com/. Es un conjunto de herramientas disponibles para usar como calendarios (datepicker) o ventanas de dialogo (dialog) llamados widgets. También hay efectos.
jQuery-UI-Library-DatePicker-_thumb
Además, existe una lista oficial de plug-ins como http://plugins.jquery.com/ casi todos con ejemplos y buenos tutoriales.
No es necesario mencionar que si buscas en google “plugin jquery” conseguirás más de 2.000.000 de páginas. La mayoría de los plug-ins están listos para ser usados, con demos también.

¿Dónde comenzar?

Si lo deseas, puedes comprar un libro como jQuery Enlightenment, Learning jQuery o jQuery in Action.
3logosjquery

jquery-logo-b_thumb
De todas formas, yo aprendí usando sitios web como los siguientes (i.e. si yo pude, no es tan difícil):
http://www.jquery.com Sitio web oficial.

JQuery_UI_Logo_thumb
http://jqueryui.com/ Sitio web de los UI( recomandado, no invente la rueda una vez más)

image35_thumb
http://plugins.jquery.com/ sitio web con muchos plug-ins.
http://jquerylist.com/ sitio web con un listado visual de plug-ins y widgets útiles( recomendado como resumen).

vjq_thumb
http://www.visualjquery.com/ sitio muy útil para buscar la referencia de las funciones de jQuery.
javascript-cheat-sheet-v1_thumbhttp://www.addedbytes.com/cheat-sheets/download/javascript-cheat-sheet-v1.png Una útil “cheat sheet” para quienes conocen de javascript y necesitan un ayuda memoria.

¿Conclusiones?

También hay muchísimos widget y plugins para ser usados esperando por tí, sólo úsalos! Supongo que esto contesta la pregunta del primer párrafo, ¿jQuery hace qué?
jQuery es un framework recomendable. Si alguien está escribiendo un montón de código javascript, intente con jQuery. Esta herramienta es muy poderosa por que tiene selectores, funciones predefinidas útiles y tiene soporte para casi todos los navegadores.