While every precaution has been taken in the preparation of this book, the publisher assumes no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. BACKBONE JS First edition. April 16, 2015. Copyright © 2015 Guillermo Lorenzo Carvallo. ISBN: 978-1511755504 Written by Guillermo Lorenzo Carvallo. 10 9 8 7 6 5 4 3 2 1
Backbone JS –––––––– JavaScript Framework Guillermo Lorenzo Carvallo
Tabla de contenido
Notas del Autor
E sta publicación está destinada a proporcionar el material útil e informativo. Esta publicación no tiene la intención de conseguir que usted sea un maestro de las bases de datos, sino que consiga obtener un amplio conocimiento general de las bases de datos para que cuando tenga que tratar con estas, usted ya pueda conocer los conceptos y el funcionamiento de las mismas.
No me hago responsable de los daños que puedan ocasionar el mal uso del código fuente y de la información que se muestra en este libro, siendo el único objetivo de este, la información y el estudio de las bases de datos en el ámbito informático. Antes de realizar ninguna prueba en un entorno real o de producción, realice las pertinentes pruebas en un entorno Beta o de prueba. El autor y editor niegan específicamente toda responsabilidad por cualquier responsabilidad, pérdida, o riesgo, personal o de otra manera, en que se incurre como consecuencia, directa o indirectamente, del uso o aplicación de cualesquiera contenidos de este libro. Todas y todos los nombres de productos mencionados en este libro son marcas comerciales de sus respectivos propietarios. Ninguno de estos propietarios ha patrocinado el presente libro. Procure leer siempre toda la documentación proporcionada por los fabricantes de software usar sus propios códigos fuente.
El autor y el editor no se hacen responsables de las reclamaciones realizadas por los fabricantes.
Introducción a JavaScript
E n sus comienzos, el lenguaje JavaScript fue creado para funcionar en el lado del cliente y se ejecutaba exclusivamente en los navegadores web. La base de la programación en el lado del cliente consiste en escribir un script y hacer que este funcione en el navegador sin tener que viajar hasta el servidor para ser ejecutado. Ejecutarse en el navegador significa que el navegador tendrá la posibilidad de interpretar y ejecutar el lenguaje. Este hace eso a través de sus motores (engines) y cada navegador tiene el suyo propio. Si busca en internet por engines javascript encontrará nombres como V8, WebKit, SipderMoney, TraceMonkey, Gecko, Chakra, etc...
El engine más usado es la V8 lanzado por Google y embebido en su navegador Chrome. Su popularidad, sin lugar a dudas, se debe al hecho de que es utilizado por el Node.js. Como mencionamos al principio, inicialmente el lenguaje se usaba para resolver problemas de interactividad de las páginas web, esta estaba en el lado del cliente (en el navegador) haciendo lo que los lenguajes del lado del servidor no podían hacer. Por contra, JavaScript estaba limitado a simplemente poder realizar mejorías en las páginas web, no es que eso fuera fácil o simple ni tan poco desmerecedor, pero el lenguaje estaba limitado al espacio del navegador. El Node.js puso un fin a ese límite, trajo el lenguaje hacia el lado del servidor colocándolo como competidor de los demás lenguajes de servidor como PHP, Python, Ruby, ASP y etc... Si ha trabajado con JavaScript antes de que trabajar con Node.js, debe sentirse excitado con la posibilidad de poder ejecutar JavaScript en el lado del servidor.
Pero para quien nunca programó en JavaScript, debe saber que existen dos caminos que se deben trabajar (el del servidor y el del cliente) tal vez no sea nada asombroso, ya que su curva de aprendizaje será acentuada. Teniendo en cuenta que la opinión más importante es la suya y no la mía, le invito a emitir su opinión sobre la siguiente cuestión: ¿Cuál será la primera impresión que tendrá un principiante sobre JavaScript ahora que este puede ser ejecutada tanto en el lado del servidor como en el cliente? Si usted es un principiante o no, aún existen más preguntas que deberá tener en cuenta:
- ¿Debo aprender JavaScript del lado del servidor o del lado del cliente?
- ¿En cuál me inicio?
- ¿A cuál debo dedicarme más?
No hay una única respuesta para estas preguntas. En mi opinión usted debe aprender las dos formas, comenzar por la que tengas más ganas y especialícese en la que más le guste, sin embargo nunca ignore el otro lado, si necesita más información trate de entender las diferencias entre un programador server-side y un front-end. Entonces, ¿Qué es JavaScript? "JavaScript (a veces llamado sólo de JS) es un lenguaje de programación, leve, interpretado, orientado a objetos, basada en prototipos y en first-class functions (funciones de primera clase), más conocida como el lenguaje de script de la Web. También se utiliza en otros entornos como node.js y Apache CouchDB". Mozilla Foundation JavaScript es el lenguaje de programación que Netscape creó para dar vida (del lado del cliente - front end) a su navegador.
El nombre tiene una orientación comercial, quisieron aprovechar el éxito de Java y escogieron un nombre similar. El resultado es que hasta hoy (2015) hay una confusión enorme. JavaScript no es Java (y viceversa). El padre de este se llama Brendan Eich. Netscape fue vendida y dio lugar a la fundación Mozilla, tomó los mandos del negocio y viene realizando un óptimo trabajo. La popularidad se dio por el hecho de que JavaScript hacía lo que ningún otro lenguaje podía hacer: transformar páginas HTML estáticas en algo dinámico sin tener que "viajar" hasta el servidor, estamos hablando del lado del cliente (front end).
El Node.js, lanzado en 2009, también colaboró mucho en la popularidad de este lenguaje, llevándolo hacia el servidor. "Parece algo que puede dominar en una tarde, JS parece simple, pero, en sus 15 años de historia hasta aquí, las mejores prácticas de JS parecían cambiar con las estaciones.". Kevin Yank y Cameron Adams (Simple JavaScript) ¿Está realmente JS Orientado a Objetos? JavaScript contiene objetos que pueden contener datos y métodos que actúan sobre esos datos. Los objetos pueden contener otros objetos. JavaScript no tiene clases, pero tiene constructores que son capaces de hacer lo que hacen las clases, incluyendo actuar como contenedores para las clases de variables y métodos. Este no tiene herencia orientada a la clase, pero tiene herencia orientada al prototipo.
JavaScript es un lenguaje orientado a objetos. Eso significa que, en vez de tener funciones definidas globalmente para operar en valores de varios tipos, los propios tipos definen métodos para trabajar con valores. Para clasificar los elementos de un array a , por ejemplo, no pasamos a hacia una función sort(). En vez de eso, llamamos al método sort() de a: a.sort() // versión orientada a objetos de "sort(a)" ¿Es JavaScript seguro? Vamos a extender esa pregunta a: ¿El lenguaje de programación X es seguro? Ningún lenguaje de programación es seguro o inseguro, la pregunta correcta sería: ¿El desarrollador programa de forma segura? Lo que sucede con JavaScript es que el código queda expuesto a cualquier usuario, por ello, percibimos erróneamente, que JavaScript es inseguro, pero esto no es verdad. Seguro o inseguro es la forma en como se programa. En el caso de la programación client-side, con miras a que el código queda expuesto, no crearemos ningún código sensible (un código que pueda ser explorado por un hacker causando daños a la aplicación).
Estandarización ECMAScript es la estandarización que rige el lenguaje JavaScript, en realidad este es el nombre oficial adoptado para el lenguaje, pero no "pega" de ninguna manera. ¿Porque tenemos un estándar? Porque cada navegador implementa el lenguaje de forma diferente, en otras palabras, si escribe un trozo de código JavaScript que funciona en el Firefox, por ejemplo, puede que no funcione en el Internet Explorer. Es más, JavaScript sufre del mismo problema que el HTML y el CSS, cada navegador lo implementa a su manera. "En teoría, la estandarización obliga a las empresas fabricantes de navegadores a implementar como mínimo aquel conjunto de funcionalidades". (Edgar Damiani).
Página siguiente