Javascript en proyectos reales: jQuery

53
Javascript en proyectos reales David Arango Maroto Simplelógica Nuevos estándares Web Máster en Ingeniería Web Universidad de Oviedo

description

Presentación utilizada como guía para la asignatura "Nuevos estándares Web" del Máster de Ingeniería Web de la Universidad de Oviedo

Transcript of Javascript en proyectos reales: jQuery

Page 1: Javascript en proyectos reales: jQuery

Javascript en proyectos reales

David Arango MarotoSimplelógica

Nuevos estándares WebMáster en Ingeniería WebUniversidad de Oviedo

Page 2: Javascript en proyectos reales: jQuery

Javascript en los 90s

http://www.dynamicdrive.com/dynamicindex9/noright.htm

Page 3: Javascript en proyectos reales: jQuery

Javascript en la actualidad (mayormente)

● Compatibilidad

● Portabilidad

● Código no intrusivo

– No hay consenso sobre la definición

– Separación entre capas

– Evitar incompatibilidad

– Graceful degradation

Page 4: Javascript en proyectos reales: jQuery

Javascript en la actualidad

● Demanda de expertos:

– 607 ofertas buscando en www.tecnoempleo.com

– http://jobs.jsninja.com/

● Requerimientos Javascript en proyectos reales

● Mucho buzz por la llamada “Web 2.0”

Page 5: Javascript en proyectos reales: jQuery

¿Cómo quieres escribir Javascript?

From scratchDrop-in- Dificultad +

Page 6: Javascript en proyectos reales: jQuery

¿Por qué usar librerías?

● Simplifican el trabajo con Javascript

– Múltiples niveles de DOM

– Diferentes implementaciones en navegadores

● Agilidad

Page 7: Javascript en proyectos reales: jQuery

Librerías

● Prototype

● Dojo

● moo.fx

● YUI

● Jquery

● ...

¡NO FRAMEWORKS!

Page 8: Javascript en proyectos reales: jQuery

Librerías – 2007

jQuery 38%

Prototype 45% YUI 17%

http://ajaxian.com/archives/nitobi-survey-results-on-ajax-development

Page 9: Javascript en proyectos reales: jQuery

Librerías – 2008

jQuery 37%

Prototype 37%

YUI 26%

http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results

Page 10: Javascript en proyectos reales: jQuery

Prototype vs jQuery

● Prototype:

– Extiende los objetos de DOM y de Javascript.

– Añade un montón de objetos extra.

– Muy sólida.

● jQuery

– Totalmente encapsulada en un sólo objeto.

– Permite encadenado de métodos.

– Realmente sencilla e intuitiva.

Page 11: Javascript en proyectos reales: jQuery

jQuery

● “Haz más con menos código”

● 2006, John Resig

● Todo lo que necesitas:

– Selección de elementos del DOM

– Manejo de eventos

– API ajax

– Animaciones (básicas)

http://ejohn.org/about/

Page 12: Javascript en proyectos reales: jQuery

jQuery (somos fans)

● Estupenda documentación

● Comunidad sólida

– http://docs.jquery.com/Discussion

– http://lists.scriptia.net/listinfo.cgi/jquery-es-scriptia.net

● Variedad de plugins

● Integración con RoR

– http://ennerchi.com/projects/jrails

● Libre, cobertura de tests, amplio soporte de navegadores...

Page 13: Javascript en proyectos reales: jQuery

jQuery ¿por qué?

● Estilo de programación

● Manejo de eventos más sencillo

● Peso

Prototype jQuery0

10

20

30

40

50

60

70

8073

54

Comprimidas con YUI Compressor http://developer.yahoo.com/yui/compressor/

Page 14: Javascript en proyectos reales: jQuery

Lovely lovely jQuery

● Cuando empezamos con jQuery no había soporte RoR

● Los bindings javascript de RoR tenían problemas de accesibilidad

● jQuery hizo el trabajo, bueno, y nosotros

● Choan Gálvez fue el culpable:

– http://choangalvez.nom.es/

Page 15: Javascript en proyectos reales: jQuery

Al grano, la función jQuery

● La función jQuery encapsula toda la funcionalidad de la librería.

● Lo primero que debes saber es cómo agregar comportamiento en la carga del DOM ¡magia!:

$(document).ready(function() { })

Page 16: Javascript en proyectos reales: jQuery

Inciso: incluyendo scripts

● Hay sólo una forma de hacerlo bien, y no hace falta ser Neerlandés para utilizarla:

<script type=”text/javascript”>

// Cada vez que pones LANGUAGE Dios mata un gatito

</script>

Buenasprácticas

Page 17: Javascript en proyectos reales: jQuery

Selección de nodos, CSS

● CSS– $('p.activo')– $('ul#menu li.activo')– $('ul#menu li:first')– $('ul#menu li:odd')

– $('ul#menu li:eq(3)')

Page 18: Javascript en proyectos reales: jQuery

Selección de nodos, CSS3

$('div[id^="content"]')

Elementos div cuyo id empieza por “content”

Más en: http://www.456bereastreet.com/archive/200601/css_3_selectors_explained/

Page 19: Javascript en proyectos reales: jQuery

Moviéndonos por el DOM

● parents() y parent()

● prev(), prev('a')

● next()

● siblings()

Page 20: Javascript en proyectos reales: jQuery
Page 21: Javascript en proyectos reales: jQuery

Inciso: literal de objeto

● Utiliza el literal de objeto, es una forma de encapsular tu código:

mi_app = {

init: function() {

// Cosas

}

}

$(document).ready(mi_app.init);Buenas

prácticas

Page 22: Javascript en proyectos reales: jQuery

Colecciones de nodos

● Con una selección de nodos podemos...

– Recorrerla:● $('input').each(function() { alert(this.value) })

– Hacer modificaciones:● $('p').hide()● $('p').addClass('activo')● $('p:odd').show().addClass('odd').append('<strong>Yeah!</strong>)

● ...

Page 23: Javascript en proyectos reales: jQuery

Trabajando con la colección

Page 24: Javascript en proyectos reales: jQuery

Modificación de attributos

● attr() hace sencillo el trabajo con atributos:– $('p').attr('title') // Retorna el valor del atributo para

el primer elemento encontrado

– $('p.destacado').attr('title', 'Destacado') // Asigna el valor al atributo de todos los elementos de la colección

● removeAttr()

● addClass(), removeClass, hasClass() hacen el resto

Page 25: Javascript en proyectos reales: jQuery

Manipulación de contenidos

● Obtener y cambiar contenido– html() text() val() (getters y setters)

● Inserciones– after() before() // Insertar fuera– append() prepend() // Insertar dentro– wrap()

Page 26: Javascript en proyectos reales: jQuery

Modificación de estilos

● css() nos hace el trabajo:– $('p').css('color', 'red')

– $('p.destacado').css({ color: 'red', background-color: 'blue'})

● Ojito con la separación entre capas

Page 27: Javascript en proyectos reales: jQuery

Inciso: usa siempre var

● Las variables en Javascript tienen ámbito global o local dependiendo de si se han creado con la palabra clave var:

numero = 42 // Yo soy global

var numero = 42 // Yo soy local

Buenasprácticas

Page 28: Javascript en proyectos reales: jQuery

Ejemplo: cebrear tabla

● Crear una tabla y aplicarle un color diferente a las filas pares e impares siguiendo los preceptos de la separación entre capas.

Page 29: Javascript en proyectos reales: jQuery

Efectos

● hide() y show()

● slideDown(), slideUp()

● fadeIn() y fadeOut

● Permiten añadir comportamiento al terminar la animación:

– $('p').slideDown(2000, function() { alert('Fin') })

Page 30: Javascript en proyectos reales: jQuery

Ejemplo: ocultar párrafos

● Documento con una serie de párrafos.

● Insertar enlaces antes de cada párrafo que permitan ocultar y desplegar.

Page 31: Javascript en proyectos reales: jQuery

Sobre el cierre del elemento <script>

● Según el apéndice C de la especificación XHTML 1.0:

C.3 Element Minimization and Empty Element Content

Given an empty instance of an element whose content model is not EMPTY (for example, an empty title or

paragraph) do not use the minimized form (e.g. use <p> </p> and not <p />).

http://www.w3.org/TR/xhtml1/#guidelines

Page 32: Javascript en proyectos reales: jQuery

Manejo de eventos

● $('p').bind('click', function() { alert('Click') })

● blur, focus, load, resize, scroll, unload, beforeunload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error

● Muchos tienen shortcuts:

– $('a:first').click(mostrar_parrafos)

Page 33: Javascript en proyectos reales: jQuery

Manejo de eventos

● Si el callback del evento retorna false se cancela el burbujeo y el comportamiento por defecto de dicho evento:

$('a:first').click(function() {

// El navegador no sigue el enlace

return false;

});

Page 34: Javascript en proyectos reales: jQuery

Inciso: burbujeo de eventos

● ¿Qué pasa cuando dos elementos anidados tienen comportamiento para un mismo evento?

Captura Burbujeo

http://www.quirksmode.org/js/events_order.html

1 2

Page 35: Javascript en proyectos reales: jQuery
Page 36: Javascript en proyectos reales: jQuery

preventDefault versus return(false)

● return(false) evita la propagación del evento y cancela su comportamiento por defecto.

● En ocasiones no querremos cancelar el burbujeo:

$('a').click(function(e) {

e.preventDefault();

});

● Si queremos evitar la propagación sin cancelar el comportamiento por defecto: stopPropagation()

Page 37: Javascript en proyectos reales: jQuery

Ojo

● return(false) no frenará el comportamiento por defecto si ocurre un error javascript antes:

$('a').click(function() {

funcion_inexistente();

return(false);

// El enlace seguirá su curso

// Un preventDefault hubiera hecho el trabajo

});Buenas

prácticas

Page 38: Javascript en proyectos reales: jQuery

Ejemplo: menú de acordeon

● Empezamos con una lista de enlaces anidada.

● Los enlaces de primer nivel deben ser agrupadores.

● Al hacer click sobre un enlace de primer nivel se despliega la lista de enlaces que contiene.

Page 39: Javascript en proyectos reales: jQuery

Ejemplo: tabtastic

● Típica lista de contenidos con pestañas.

Page 40: Javascript en proyectos reales: jQuery

AJAX

Asynchronous

Javascript

And

XML

Page 41: Javascript en proyectos reales: jQuery

AJAX

Page 42: Javascript en proyectos reales: jQuery

Inciso, diálogos HTTP

● Presentación sobre diálogos HTTP.

● Analizar la Fisgona de Menéame.

Page 43: Javascript en proyectos reales: jQuery

AJAX

Asynchronous

Javascript

And

XML ?

Page 44: Javascript en proyectos reales: jQuery

Ajax en minúsculas

● Más que un acrónimo, es una forma de interacción.

● Carga asincrónica de datos, con o sin interacción del usuario.

Page 45: Javascript en proyectos reales: jQuery

Ejemplos: autocompletado

Page 46: Javascript en proyectos reales: jQuery

Ejemplos: edit in place

Page 47: Javascript en proyectos reales: jQuery

Ejemplos: formularios asincrónicos

Page 48: Javascript en proyectos reales: jQuery

Ajax con jQuery: load()

load(uri)

Page 49: Javascript en proyectos reales: jQuery

Ejemplo: hola mundo ajax

● Escribir una página web con una lista de enlaces a páginas locales.

● Cargar el enlace vía ajax en un div insertado a continuación.

● Copiar el ejemplo a servidor HTTP local, analizar con firebug las cabeceras HTTP.

Page 50: Javascript en proyectos reales: jQuery

Ajax avanzado en jQuery : ajax()

$.ajax({

url: url,

dataType: 'xml',

success: function(msg) {

// Éxito

}

});

Page 51: Javascript en proyectos reales: jQuery

Ejemplo: ajax con xml

● ¡Lo de antes era AHAH! http://en.wikipedia.org/wiki/AHAH

● Intentar el ejemplo anterior con XML como tipo de datos.

Page 52: Javascript en proyectos reales: jQuery

Tests de unidad: jShoulda

http://jshoulda.scriptia.net/

Page 53: Javascript en proyectos reales: jQuery

Tests de aceptación: Selenium

http://seleniumhq.org/ http://www.vimeo.com/2343914