SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Javascript en proyectos reales




Nuevos estándares Web
Máster en Ingeniería Web     David Arango Maroto
Universidad de Oviedo                Simplelógica
Javascript en los 90s




http://www.dynamicdrive.com/dynamicindex9/noright.htm
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
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”
¿Cómo quieres escribir Javascript?


            - Dificultad +
 Drop-in                     From scratch
¿Por qué usar librerías?
●   Simplifican el trabajo con Javascript
    –   Múltiples niveles de DOM
    –   Diferentes implementaciones en navegadores
●   Agilidad
Librerías
●   Prototype
●   Dojo
●   moo.fx      ¡NO FRAMEWORKS!
●   YUI
●   Jquery
●   ...
Librerías – 2007

                                                 jQuery 38%




                                                           YUI 17%
         Prototype 45%




http://ajaxian.com/archives/nitobi-survey-results-on-ajax-development
Librerías – 2008

                                               jQuery 37%




  Prototype 37%
                                                     YUI 26%




http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results
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.
jQuery
●   “Haz más con menos código”
●   2006, John Resig
●   Todo lo que necesitas:
    –   Selección de elementos del DOM
    –   Manejo de eventos                http://ejohn.org/about/

    –   API ajax
    –   Animaciones (básicas)
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...
jQuery ¿por qué?
●   Estilo de programación
●   Manejo de eventos más sencillo
●   Peso       80

               70
                     73


               60
                                         54
               50

               40

               30

               20

               10

               0
                          Prototype           jQuery


     Comprimidas con YUI Compressor http://developer.yahoo.com/yui/compressor/
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/
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() { })
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>



                                                 Buenas
                                                prácticas
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)')
Selección de nodos, CSS3


           $('div[id^=quot;contentquot;]')
       Elementos div cuyo id empieza por “content”
                        Más en:
http://www.456bereastreet.com/archive/200601/css_3_selectors_e
Moviéndonos por el DOM
●   parents() y parent()
●   prev(), prev('a')
●   next()
●   siblings()
Inciso: literal de objeto
●   Utiliza el literal de objeto, es una forma de
    encapsular tu código:


mi_app = {
    init: function() {
        // Cosas
    }
}
                                                     Buenas
$(document).ready(mi_app.init);                     prácticas
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>)
●   ...
Trabajando con la colección
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
Manipulación de contenidos
●   Obtener y cambiar contenido
    –   html() text() val()   (getters y setters)
●   Inserciones
    –   after() before() // Insertar fuera
    –   append() prepend() // Insertar dentro
    –   wrap()
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
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



                                                  Buenas
                                                 prácticas
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.
Efectos
●   hide() y show()
●   slideDown(), slideUp()
●   fadeIn() y fadeOut
●   Permiten añadir comportamiento al terminar la
    animación:
    –   $('p').slideDown(2000, function() { alert('Fin') })
Ejemplo: ocultar párrafos
●   Documento con una serie de párrafos.
●   Insertar enlaces antes de cada párrafo que permitan
    ocultar y desplegar.
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
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)
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;
});
Inciso: burbujeo de eventos
●   ¿Qué pasa cuando dos elementos anidados tienen
    comportamiento para un mismo evento?

        Captura                     Burbujeo
                       1                         2




     http://www.quirksmode.org/js/events_order.html
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()
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
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.
Ejemplo: tabtastic
●   Típica lista de contenidos con pestañas.
AJAX


Asynchronous
 Javascript
    And
    XML
AJAX
Inciso, diálogos HTTP
●   Presentación sobre diálogos HTTP.
●   Analizar la Fisgona de Menéame.
AJAX




               ?
Asynchronous
 Javascript
    And
    XML
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.
Ejemplos: autocompletado
Ejemplos: edit in place
Ejemplos: formularios asincrónicos
Ajax con jQuery: load()



       load(uri)
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.
Ajax avanzado en jQuery : ajax()

          $.ajax({
            url: url,
            dataType: 'xml',
            success: function(msg) {
                // Éxito
            }
          });
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.
Tests de unidad: jShoulda



   http://jshoulda.scriptia.net/
Tests de aceptación: Selenium




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

Más contenido relacionado

La actualidad más candente

Despegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJSDespegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJS
Facundo Viale
 
Guia java script
Guia java scriptGuia java script
Guia java script
mariaunefa
 
Guia html2
Guia html2Guia html2
Guia html2
ljds
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
cok12v
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)
UTN
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
Sorey García
 

La actualidad más candente (20)

Despegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJSDespegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJS
 
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
Guia java script
Guia java scriptGuia java script
Guia java script
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
Hola RoR
Hola RoRHola RoR
Hola RoR
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
La magia de jquery
La magia de jqueryLa magia de jquery
La magia de jquery
 
Web components
Web componentsWeb components
Web components
 
Guia html2
Guia html2Guia html2
Guia html2
 
Definición y función de lenguaje java script
Definición y  función de lenguaje java scriptDefinición y  función de lenguaje java script
Definición y función de lenguaje java script
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de java
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJS
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.Forms
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)
 
Angular js
Angular jsAngular js
Angular js
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
 

Destacado

Desarrollador c,c++
Desarrollador c,c++Desarrollador c,c++
Desarrollador c,c++
202527
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
Juan C
 
JavaScript Avanzado
JavaScript AvanzadoJavaScript Avanzado
JavaScript Avanzado
Adolfo Sanz De Diego
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
Any Saula
 

Destacado (20)

Desarrollador c,c++
Desarrollador c,c++Desarrollador c,c++
Desarrollador c,c++
 
Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995
 
Java script
Java scriptJava script
Java script
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
 
Lenguaje objective c
Lenguaje objective cLenguaje objective c
Lenguaje objective c
 
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXJavascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
 
Javascript
JavascriptJavascript
Javascript
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Lenguaje de programación java
Lenguaje de programación javaLenguaje de programación java
Lenguaje de programación java
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -Introducción
 
manual java
manual javamanual java
manual java
 
Metaprogramación en JavaScript
Metaprogramación en JavaScriptMetaprogramación en JavaScript
Metaprogramación en JavaScript
 
Aprende JavaScript
Aprende JavaScriptAprende JavaScript
Aprende JavaScript
 
#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript
 
Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++
 
JavaScript Avanzado
JavaScript AvanzadoJavaScript Avanzado
JavaScript Avanzado
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 

Similar a Javascript en proyectos reales: jQuery

Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
Adrià Solé Orrit
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
kaolong
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009
Irontec
 

Similar a Javascript en proyectos reales: jQuery (20)

Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
 
En 20 minutos ... jQuery
En 20 minutos ... jQueryEn 20 minutos ... jQuery
En 20 minutos ... jQuery
 
(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
J query
J queryJ query
J query
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript Clásico
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009
 
Rails intro
Rails introRails intro
Rails intro
 
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIAAccesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
 
JQuery Mvc
JQuery   MvcJQuery   Mvc
JQuery Mvc
 
Jquery
JqueryJquery
Jquery
 
JAVASCRIPT.pptx
JAVASCRIPT.pptxJAVASCRIPT.pptx
JAVASCRIPT.pptx
 
jQuery y ASP
jQuery y ASPjQuery y ASP
jQuery y ASP
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008
 
De HTML a Express
De HTML a ExpressDe HTML a Express
De HTML a Express
 
Javascript
JavascriptJavascript
Javascript
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Javascript en proyectos reales: jQuery

  • 1. Javascript en proyectos reales Nuevos estándares Web Máster en Ingeniería Web David Arango Maroto Universidad de Oviedo Simplelógica
  • 2. Javascript en los 90s http://www.dynamicdrive.com/dynamicindex9/noright.htm
  • 3. 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
  • 4. 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”
  • 5. ¿Cómo quieres escribir Javascript? - Dificultad + Drop-in From scratch
  • 6. ¿Por qué usar librerías? ● Simplifican el trabajo con Javascript – Múltiples niveles de DOM – Diferentes implementaciones en navegadores ● Agilidad
  • 7. Librerías ● Prototype ● Dojo ● moo.fx ¡NO FRAMEWORKS! ● YUI ● Jquery ● ...
  • 8. Librerías – 2007 jQuery 38% YUI 17% Prototype 45% http://ajaxian.com/archives/nitobi-survey-results-on-ajax-development
  • 9. Librerías – 2008 jQuery 37% Prototype 37% YUI 26% http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results
  • 10. 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.
  • 11. jQuery ● “Haz más con menos código” ● 2006, John Resig ● Todo lo que necesitas: – Selección de elementos del DOM – Manejo de eventos http://ejohn.org/about/ – API ajax – Animaciones (básicas)
  • 12. 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...
  • 13. jQuery ¿por qué? ● Estilo de programación ● Manejo de eventos más sencillo ● Peso 80 70 73 60 54 50 40 30 20 10 0 Prototype jQuery Comprimidas con YUI Compressor http://developer.yahoo.com/yui/compressor/
  • 14. 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/
  • 15. 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() { })
  • 16. 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> Buenas prácticas
  • 17. 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)')
  • 18. Selección de nodos, CSS3 $('div[id^=quot;contentquot;]') Elementos div cuyo id empieza por “content” Más en: http://www.456bereastreet.com/archive/200601/css_3_selectors_e
  • 19. Moviéndonos por el DOM ● parents() y parent() ● prev(), prev('a') ● next() ● siblings()
  • 20.
  • 21. Inciso: literal de objeto ● Utiliza el literal de objeto, es una forma de encapsular tu código: mi_app = { init: function() { // Cosas } } Buenas $(document).ready(mi_app.init); prácticas
  • 22. 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>) ● ...
  • 23. Trabajando con la colección
  • 24. 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
  • 25. Manipulación de contenidos ● Obtener y cambiar contenido – html() text() val() (getters y setters) ● Inserciones – after() before() // Insertar fuera – append() prepend() // Insertar dentro – wrap()
  • 26. 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
  • 27. 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 Buenas prácticas
  • 28. 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.
  • 29. Efectos ● hide() y show() ● slideDown(), slideUp() ● fadeIn() y fadeOut ● Permiten añadir comportamiento al terminar la animación: – $('p').slideDown(2000, function() { alert('Fin') })
  • 30. Ejemplo: ocultar párrafos ● Documento con una serie de párrafos. ● Insertar enlaces antes de cada párrafo que permitan ocultar y desplegar.
  • 31. 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
  • 32. 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)
  • 33. 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; });
  • 34. Inciso: burbujeo de eventos ● ¿Qué pasa cuando dos elementos anidados tienen comportamiento para un mismo evento? Captura Burbujeo 1 2 http://www.quirksmode.org/js/events_order.html
  • 35.
  • 36. 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()
  • 37. 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
  • 38. 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.
  • 39. Ejemplo: tabtastic ● Típica lista de contenidos con pestañas.
  • 41. AJAX
  • 42. Inciso, diálogos HTTP ● Presentación sobre diálogos HTTP. ● Analizar la Fisgona de Menéame.
  • 43. AJAX ? Asynchronous Javascript And XML
  • 44. 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.
  • 48. Ajax con jQuery: load() load(uri)
  • 49. 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.
  • 50. Ajax avanzado en jQuery : ajax() $.ajax({ url: url, dataType: 'xml', success: function(msg) { // Éxito } });
  • 51. 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.
  • 52. Tests de unidad: jShoulda http://jshoulda.scriptia.net/
  • 53. Tests de aceptación: Selenium http://seleniumhq.org/ http://www.vimeo.com/2343914