Académique Documents
Professionnel Documents
Culture Documents
ARQUITECTURA
TEMA: BACKBONE.JS
ALUMNOS:
LIMA PER
2017-I
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
CONTENIDO
1. INTRODUCCIN .................................................................................................................................3
2. OBJETIVOS...........................................................................................................................................4
2.1. Objetivos Generales .......................................................................................................................4
2.2. Objetivos Especficos .....................................................................................................................4
3. INTRODUCCION A BACKBONE.JS ................................................................................................4
3.1.Que es BackboneJS .............................................................................................................................4
3.2.Facilidades de BackboneJS ................................................................................................................4
3.3.Qu tipo de librera javascript es backbone.js .................................................................................5
3.4.Dnde usar BackboneJS .....................................................................................................................5
4. Introduccin a los Eventos en BackboneJS..7
4.1.Eventos en general ..............................................................................................................................6
4.2.Utilidad de los eventos de BackboneJS .............................................................................................6
4.3.Implementar los eventos en BackboneJS ..........................................................................................7
5. Modelos y colecciones en BackboneJS .................................................................................................7
5.1.Modelos en BackboneJS .....................................................................................................................7
5.2.Sincronizacin con el servidor ...........................................................................................................8
5.3.Colecciones en BackboneJS ...............................................................................................................9
6. Vistas en BackboneJS ............................................................................................................................9
6.1.Vistas en general ..................................................................................................................................10
6.2.Potencia de las vistas en BackboneJS ................................................................................................10
7. Route o manejar las URL con BackboneJS .......................................................................................11
7.1.Cmo trabaja BackboneJS con los deep links ..................................................................................12
7.2.Router de BackboneJS ........................................................................................................................13
7.3.Sync en BackboneJS............................................................................................................................14
8. Instalar Backbone.js en un proyecto web ..........................................................................................14
8.1.Descarga Backbone.js y Underscore.js ..............................................................................................14
8.2.Instalando los scripts ...........................................................................................................................15
8.3.Implementar y disparar eventos en Backbone.js..............................................................................15
8.3.1.Backbone.Events ............................................................................................................................15
8.3.2.Asignar manejadores de eventos con on() ...................................................................................16
8.3.3Disparar eventos con trigger() .......................................................................................................16
Pgina 1
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
1. INTRODUCCIN
BackboneJS es una librera para el desarrollo de sitios web, principalmente usada para
aplicaciones web con bastante interaccin con el cliente, donde se hace un uso intensivo
de Javascript, Ajax, etc.
Utilizando palabras sencillas, BackboneJS es un conjunto de objetos que tienen mtodos
(o funciones, si lo prefieres llamar as) que van a proveer de estructura a nuestro cdigo,
facilitar el trabajo con datos, vistas para producir nuestro HTML, las interacciones para
implementar comportamientos que deba realizar frente a acciones del usuario y los
servicios para comunicar con cualquier tecnologa que usemos del lado del servidor, ya
sea NodeJS, PHP, Ruby, .NET, etc.
Pgina 3
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
2. OBJETIVOS
3. INTRODUCCION A BACKBONE.JS
BackboneJS es una librera para el desarrollo de sitios web, principalmente usada para
aplicaciones web con bastante interaccin con el cliente, donde se hace un uso intensivo de
Javascript, Ajax, etc. Te permite desarrollar en Javascript atendiendo a patrones, con una
variante del paradigma MVC, el mismo que se ha introducido con fuerza en la programacin
del lado del servidor y que, desde hace menos tiempo, viene empezando a ser costumbre en el
Tal como se definen ellos mismos, Backbone.js ofrece una estructura para aplicaciones que
hace uso intensivo de Javascript y que provee de modelos llave / valor enlazables mediante
eventos, colecciones con la posiblidad de realizar diferentes utilidades por medio de una API,
disponibles anteriormente.
Pgina 4
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
Se trata de un API de programacin, por lo que podemos llamarlo librera sin lugar a
equivocacin. Adems, te permite trabajar con una variante del MVC, por lo que tambin te
impone una manera especfica de organizar tu cdigo, lo que es una de las caractersticas de
los frameworks, sin embargo, como veremos, Backbone es bastante flexible, permitiendo
aplicarlo a un sitio web completo o a un nico mdulo, algo que quizs nos aleja de la idea de
framework.
Lo puedes usar donde te apetezca, nunca est de ms implementar mecanismos que te ayuden
especialmente indicada para el uso en aplicaciones web que hagan un uso intensivo de
Javascript.
Usa BackboneJS en una aplicacin web en la que ya se entiende que vas a tener bastante lgica
entorno donde sera excelente usar Backbone.js. Es til tambin en cualquier pgina, que aun
siendo sencilla, tiene los mismos datos y se muestran en varios sitios distintos, replicados en
diversos elementos, ya que te permite mantener la sincronizacin con todos esos datos de una
manera sencilla y prcticamente automtica, sin que tengas que estar revisando constantemente
cundo cambian tus datos para actualizarlos en todos los lugares donde aparecen.
tener pocos elementos con interaccin con el usuario y donde las funciones manejadoras sean
bastante sencillas. El usar Backbone aporta un poco de complejidad al desarrollo, por lo que
no sera tan adecuado para pequeos proyectos o pginas bastante estticas. Si tu cdigo es
muy pequeo y lo puedes tener en unas decenas de lneas de cdigo, no se recomendara usar
Backbone.
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
introducir un concepto fundamental para entender los eventos. De momento nos centraremos
ms bien en la parte ms terica, aclarando conceptos y explorando las posibilidades que nos
Con toda certeza debes tener una idea de lo que es un evento en Javascript, as que, veamos
cmo son las mejoras en el sistema de eventos que podemos implementar ayudados de
BackboneJS.
Cuando "pasa algo". Por decirlo de otra manera, es un "mensaje". El evento es el puro mensaje,
con informacin asociada y relevante al evento, que nos puede dar datos adicionales al contexto
donde se ha producido.
Javascript nativo, la clase Event de BackboneJS nos permite lanzar eventos y escuchar eventos
sobre cualquier objeto que queramos. Se puede tener un objeto normal y corriente en Javascript,
poder lanzar eventos, escucharlos, suscribirte a eventos que se produzcan en otros objetos.
cualquier lugar. A travs de la clase Evento tienes una interfaz de programacin que te permite
automticamente hacia otros objetos que tambin puedan estar interesados en esos mensajes.
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
La clase Event de Backbone es muy importante porque se puede usar en cualquier objeto, por
lo que tanto vistas, modelos y cualquier otro objeto tienen esa misma interfaz de "mensajes"
De momento nos vamos a centar en la parte conceptual y vamos a dejar el cdigo para ms
adelante, donde veremos ejemplos en detalle. Sin embargo, os podemos adelantar que
Backbone se apoya de jQuery (recordemos que es una de sus dependencias) y por ello
No obstante, existen algunas mejoras interesantes. De momento nos debemos de quedar que
idea es exactamente la misma que en jQuery, pudiendo con el mtodo on() asignar la funcin
Adems, existe una serie de eventos que vienen "de serie" en Backbone que se lanzan cuando
ocurren cosas tpicas sobre modelos, colecciones y vistas. Ejemplos de ello seran "add",
"remove", "change", "request", "sync", "error" etc. Veremos ms adelante todo esto con mayor
detalle.
qu nos sirven, de modo que podamos entender las ventajas que podemos disfrutar al usarlos.
Los modelos, como en otros sistemas enfocados a MCV, se refieren a los datos de la aplicacin.
Si tengo una aplicacin que trabaja con suscripciones de correo electrnico, el modelo ser
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
cada una de las cuentas de usuario del sistema. Si tengo una aplicacin que se encarga de
mostrar una base de datos de pelculas, el modelo ser cada una de esas pelculas.
Los modelos en BackboneJS se pueden crear con cualquier objeto en notacin JSON. En ellos
se escriben los datos que podemos tener dentro del modelo. Al extenderlos con la funcionalidad
Esto, en pocas palabras, hace posible que, si modificas un valor de un modelo, la aplicacin
puede reaccionar en varios otros objetos que estn suscritos a los eventos de cambios en los
datos de un modelo.
Para entender la potencia de esto, supongamos que ests mostrando en algn lugar los datos de
un usuario. Si modificas con Javascript los datos de ese usuario en un lugar, tienes que estar
repasando a mano todos los otros lugares donde ests mostrando esos datos de ese usuario y
actualizarlos manualmente. Usando Backbone todo esto es automtico y tienes los modelos
modelo, se producen eventos y esos eventos los puedes estar escuchando en varias vistas
modelo.
actualizada a lo largo del sitio web, sino que facilita la reutilizacin de los modelos en otros
Otra de las genialidades de BackboneJS est en el "sync", pues si yo lo deseo, al crear el modelo
puedo proveerle de una URL y hacer "save" en el modelo para llamar al servidor a esa URL y
guardar sus cambios. Dicho de otra forma, desde un modelo puedo ejecutar una funcin de
guardado que automticamente hace una solicitud por AJAX a mi servidor, envindole los
Es decir, no tienes que hacer mucho, simplemente tienes tus modelos y al hacer el "save" de
sus valores, BackboneJS llama por si solo al servidor por AJAX. En esa llamada automtica
Ahora nos vamos a dedicar a entender qu son las colecciones en BackboneJS y qu procesos
pueden facilitarnos.
Con las colecciones, del mismo modo que ocurra con los modelos, tenemos a nuestra
Gracias a la sincronizacin, si tienes una coleccin y le has hecho cambios, podrs hacer un
"save" y entonces los datos que hay en los modelos de la coleccin se enviarn al servidor
mediante AJAX y de manera automtica para el desarrollador. De manera similar, cuando carga
la aplicacin, tambin en las colecciones podremos hacer "fetch" para cargar datos en ellas que
nos vienen del servidor. Automticamente, la coleccin hace por AJAX el "get" al servidor y
6. Vistas en BackboneJS
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
Conociendo las vistas podremos entender finalmente cmo todos los "engranajes" que nos ofrece
BackboneJS para el desarrollo web funcionan, ligados entre s por el sistema de eventos, para realizar
Las vistas contienen la parte del cdigo que sirve para presentar la informacin. Como estamos
desarrollando web, las vistas contendrn el cdigo HTML que tenemos que generar para
Este es otro de los elementos clave de BackboneJS y de cualquier sistema que trabaje en base
a patrones de diseo de software MVC. De hecho, en nuestras aplicaciones web, con lo que
ms vamos a trabajar es con los modelos y las vistas. Los modelos ya sabemos que sirven para
almacenar los datos y las vistas que sirven para mostrarlos en cdigo HTML.
Si lo queremos ver as, las vistas son una abstraccin de cmo vamos a ver los datos en nuestra
pgina. Pensando en un sitio web, podramos tener una vista general que nos guarda la
"plantilla" sobre el contenido que va a tener toda la pgina. Pero si lo deseamos hacer un poco
ms modular, podramos tener una vista general y otra serie de vistas hijas, que contienen cada
uno de los elementos de la pgina, por ejemplo, una para el buscador, otra para el recuadro de
El sistema de vistas, adems, se enlaza con los modelos, de modo que podemos mostrar los
datos de esos modelos en las vistas, pero adems hay determinadas vistas que las podremos
enlazar con colecciones en vez de modelos para mostrar un conjunto de datos. Por ejemplo, en
los comentarios de artculos podramos tener enlazada una coleccin con todos los modelos de
los comentarios que deben aparecer. Es decir, en nuestra vista de comentarios tendramos
asociada una coleccin donde cada comentario sera cada uno de los modelos de la coleccin.
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
Siguiendo ese ejemplo de los comentarios, cuando un usuario hace un comentario en la pgina
que mandara ese comentario al servidor. Adems, podramos estar haciendo un "fetch" en la
coleccin que actualizara los comentarios con los datos que haya en el servidor actualmente.
Estos cambios en los modelos y las colecciones estaran lanzando eventos, los cuales a su vez
En fin, si una vista detecta que ha habido cambios en los modelos o colecciones que tiene
que ya no haya los mismos elementos, pues quizs se agregaron nuevos o se eliminaron algunos
antiguos. Todo esto nos permite tener vistas que son perfectamente dinmicas, sin tener que
aplicacin.
Las rutas "route" de BackboneJS nos sirven para manejar las URLs de la aplicacin, es decir, saber
cul es la direccin en la que estamos y poder actuar de maneras distintas dependiendo de ellas.
Para explicarlo bien, vamos a comenzar con un ejemplo sobre cmo manejaba las URLs
anteriormente Twitter. Aunque hoy ya no nos muestra URLs como esta, todava siguen funcionando
perfectamente: https://twitter.com/#!/erickrdch
Los navegadores cuando reciben una URL que incluye el signo "#" (almohadilla, gato, numeral)
entienden que es una referencia a un rea determinada dentro de la pgina definida por lo que hay
antes de la almohadilla. Si cambiamos lo que hay despus de la "#" no navegan a una nueva URL,
sino que llevan la pgina hacia arriba o hacia abajo para mostrarnos otra zona de la pgina. Esto no
debe ser nada nuevo para los lectores, pues es justamente lo que ocurre con los enlaces internos,
llaman "deep links" o sea, enlaces a una parte interna y especfica de tu aplicacin.
Para que entendamos para qu nos sirve esto de los "deep links" pensemos en otro ejemplo. Imagnate
que tienes una rejilla, tabular, o si lo prefieres llmale sencillamente tabla con datos ("table grid" se
suele usar en Ingls). Si pulsas sobre una de las lneas de esa rejilla, imagina que entras en la edicin
del registro que haba en esa lnea y Javascript te la transforma para mostrar un formulario donde
puedes modificar los datos. Pues bien, generalmente, por medio de una URL simple no vas a tener
pgina que muestra el table grid, pero no vas a poder especificarle a tu aplicacin que quieres que te
Un enlace profundo es justamente para crear esas URLs en las que ests accediendo directamente a
un estado complejo y determinado de tu aplicacin. Vamos a suponer que tengo misitio.com que
BackboneJS captura estas diferencias o cambios en las URLs, cuando se usan enlaces
profundos, para poder realizar cosas especficas que se deseen implementar por medio de los
deep links.
Volvemos a lo mismo de siempre, Backbone.JS utilizar los eventos para permitir que las
caractersticas tiene el nuevo enlace y poder realizar los cambios oportunos en los modelos,
colecciones o vistas.
Lo genial de esto es que podrs usar enlaces dentro de tu aplicacin web que vayan siempre a
la misma pgina, con lo que tu navegador no la actualizar nunca. Esto produce lo que
conocemos como aplicaciones web de una sola pgina, que se comportan parecido a las
aplicaciones web de escritorio y que tienen un desempeo mucho mejor. Sin embargo, el detalle
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
aplicacin, en un estado determinado, lo que est guardando es el "deep link", de modo que
cuando vuelva a entrar en la aplicacin, se le abrir mostrando el mismo estado donde haba
sido guardada.
Esto de los deep links te vale para un gran abanico de situaciones, como por ejemplo cuando el
usuario copia y pega el enlace actual para mandarlo por e-mail o tuitearlo, por ejemplo. Podr
mandar, no solo el enlace a la "home" de tu sitio, sino tambin a una seccin o un estado
Realmente todo esto se hace de manera muy transparente para el desarrollador, por medio del
"ruteador" de Backbone.JS, la clase Route. Simplemente tienes que cambiar la direccin por
cambia la URL y gestiona el historial del navegador de modo que puedas ir hacia atrs y
Afortunadamente, como decamos, en caso que el navegador no soporte el API History del
a los tpicos MVC por MVR. O sea, cambi los "Controller" por "Route", pero qu tienen que
Las diferencias dependen mucho del framework o librera que se est usando. Pero en lneas
sencillo, porque simplemente se encarga de dirigir las peticiones o las acciones de los usuarios
a los lugares concretos donde est el cdigo que tiene que realizar lo que se solicita. Si lo
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
quieres ver as, el Router es como una manera de recibir parmetros, que te indican qu es lo
En cierto modo, el ruteadores de backbone es algo parecido a los controladores que podemos
conocer en los sistemas MVC, en el sentido que los controladores permiten generar URL de tu
aplicacin que realmente no existen como archivos dentro de tu hosting, sino que son
gestionados por el software para emular que esas pginas estn fsicamente en el servidor.
Gracias a BackboneJS gestionamos esas rutas como si fueran URL que existen fsicamente en
el servidor, aunque esos archivos realmente no se encuentren. Todo esto no es gratuito, es decir,
implica que tendremos que configurar nuestro Apache, o el servidor web que estemos usando,
para que interprete esas rutas y las redireccione hacia archivos que s que existan fsicamente,
pero de manera transparente para el navegador. Todo eso se ver ms adelante, pero si conoces
Es simplemente la comunicacin de las colecciones y modelos con el lado del servidor, que
permite hacer llamadas para leeer o guardar estados de los datos en el servidor. Todo, por
supuesto, por medio de AJAX, usando el mtodo jQuery.ajax y JSON como formato de datos
Existe un modelo estndar implementado en Backbone que nos facilita mucho la sincronizacin
de los datos, pero tambin si tienes un sistema diferente, de manera sencilla puedes
Adems, BackboneJS tiene una dependencia con Underscore.js, que es una librera que ampla
el API de Javascript nativo con muchas funciones y mtodos adicionales, bsicos para realizar
Despus de descargar estas libreras, crears tu index.html incluyndolas en el cdigo con las
<script src="jquery.js"></script>
<script src="underscore.js"></script>
8.3.1. Backbone.Events
Este es el mdulo que se usa para trabajar con eventos en el framework, Backbone.Events y
Para definir un evento sobre un objeto tenemos primero que extender dicho objeto con la clase
//creo un objeto cualquiera con Javascript, usando notacin JSON var objeto = {}
_.extend(objeto, Backbone.Events)
Usamos el mtodo on() para asignar una funcin manejadora de eventos sobre un objeto, para
un evento cualquiera. Este mtodo recibe al menos dos valores, siendo el primero el nombre
del evento que queremos crear y el segundo la funcin manejadora que asocial, que ser
})
En este caso "mi_primer_evento" es el nombre del evento que estamos creando. La funcin
annima que se enva como segundo parmetro es el manejador de evento que estamos creando,
Una vez que hemos asociado una funcin manejadora con un objeto a ejecutar como respuesta
El modo es muy sencillo, simplemente le indicamos el nombre del evento que queremos que
En realidad, trigger() solo requiere un parmetro, que es el nombre del evento que queremos
dato2){
alert("se produjo el evento 'varios_datos' y he recibido " + dato1 + " y " + dato2)
})
8.3.4. Variable "this" como contexto dentro de las funciones manejadoras de eventos
eventos, que nos da una referencia al contexto donde se est ejecutando este cdigo; dicho de
Esto no debera generar muchas dudas, pero veamos no obstante el siguiente cdigo.
nombre: "Miguel"
_.extend(persona, Backbone.Events)
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
})
Como resultado de ejecutar ese cdigo, comprobars que se muestra el nombre de la persona
"Miguel", que hemos obtenido a travs de this.nombre. O sea, "this", es una referencia al objeto
El mdulo de eventos contiene otras funciones interesantes que veremos un poco despus,
como off() o one(). Os citamos para prximas entregas en las que seguiremos conociendo las
9. CONCLUSIONES
10. RECOMENDACIONES
Pgina
19
FACULTAD DE INGENIERA Y ARQUITECTURA CURSO: Fundamentos Web
TEMA: BackboneJS
11. BIBLIOGRAFA
Pgina
20