• Skip to primary navigation
  • Skip to content
  • Skip to footer
  • Sobre mí
  • Servicios
  • Blog
  • Contacto

Tutorial de Backbone.js – I. Eventos

4 diciembre, 2011 by alfonso 8 Comments

Introducción

En este primer tema me gustaría explicar lo que considero el componente más transversal de Backbone: la gestión de eventos. Entendiendo el sistema de eventos asentaremos las bases que nos ayudarán a entender mejor los distintos componentes que veremos en sucesivos temas.

Backbone.Event

La librería Backbone se apoya en el concepto de evento como método principal de comunicación entre componentes. Cada uno de los elementos de Backbone será capaz de emitir y capturar eventos para conectar los distintos elementos de la aplicación.

Backbone tiene un pequeño módulo de eventos que puede utilizarse para extender cualquier objeto de nuestra aplicación, dotándole de esta forma de la posibilidad de enviar y capturar eventos arbitrarios.

Para que un objeto posea la capacidad de capturar y enviar eventos, debe extender Backbone.Events con la función _.extend de underscore.js:

var mi_objeto = {};
MiObjeto=_.extend(mi_objeto, Backbone.Events);
 
// Con la funcion bind podemos enlazar un evento cualquiera con una
// función callback que se ejecutará cuando este evento ocurra en este objeto
mi_objeto.bind("un_evento", function(msg){
    alert('Vaya, ha ocurrido un_evento con mensaje' + msg);
});
 
// Un objeto puede disparar un evento en el momento que desee
// utilizando la función trigger
mi_objeto.trigger('un_evento','de_ejemplo');

var mi_objeto = {}; MiObjeto=_.extend(mi_objeto, Backbone.Events); // Con la funcion bind podemos enlazar un evento cualquiera con una // función callback que se ejecutará cuando este evento ocurra en este objeto mi_objeto.bind("un_evento", function(msg){ alert('Vaya, ha ocurrido un_evento con mensaje' + msg); }); // Un objeto puede disparar un evento en el momento que desee // utilizando la función trigger mi_objeto.trigger('un_evento','de_ejemplo');

Un evento se identifica por una cadena de caracteres arbitraria, aunque por convenio, si una aplicación utiliza un número alto de eventos se recomienda separar identificadores entre símbolos de dos puntos para establecer espacios de nombres. Ejemplos: ‘actualizar:sidebar’ o ‘alerta:nivel1’. Más adelante veremos cómo el propio Backbone hace uso de este convenio para sus propios eventos.

Enlazado de eventos: binding

Como hemos visto en el ejemplo anterior, con la función bind(event, callback, [context]) podemos enlazar un evento a una función callback que se ejecutará cuando este evento se dispare en el contexto del objeto enlazado. Opcionalmente, podremos incluir un contexto sobre el que se ejecutará la función callback, ya que por defecto se ejecutará en el contexto del objeto que recibe el evento (en el ejemplo, this será mi_objeto).

Existe un evento especial llamado ‘all’ que nos permitirá enlazar todos los eventos de un objeto a una misma función callback, a la cual se le pasará como parámetro el nombre del evento:

mi_objeto.bind('all', function(nombre_evento){
  // Implementación
}

mi_objeto.bind('all', function(nombre_evento){ // Implementación }

Un mismo objeto podrá enlazar tantas funciones como desee a un mismo evento:

mi_objeto.bind('un_evento', function(){
    alert('Función callback 1');});
mi_objeto.bind('un_evento', function(){
    alert('Función callback 2')});
mi_objeto.trigger('un_evento'); // Se ejecutan los dos alert;

mi_objeto.bind('un_evento', function(){     alert('Función callback 1');}); mi_objeto.bind('un_evento', function(){     alert('Función callback 2')}); mi_objeto.trigger('un_evento'); // Se ejecutan los dos alert;

Desenlazado de eventos: unbinding

Para desenlazar los eventos enlazados, utilizaremos unbind([evento], [callback]) donde opcionalmente aceptará un nombre de evento y una función callback desenlazar. Si no se especifica ninguna función callback, se desenlazarán todas las funciones asociadas al evento especificado, y si no se especifica ningún evento, se desenlazarán todas las funciones de todos los eventos del objeto:

mi_objeto.unbind('mi_evento', miFuncionCallback); // Desenlaza solo la función miFuncionCallback del evento mi_evento
mi_objeto.unbind('mi_evento');                    // Desenlaza todas las funciones callback del evento mi_evento
mi_objeto.unbind();                               // Desenlaza todas las funciones de todos los eventos

mi_objeto.unbind('mi_evento', miFuncionCallback); // Desenlaza solo la función miFuncionCallback del evento mi_evento mi_objeto.unbind('mi_evento'); // Desenlaza todas las funciones callback del evento mi_evento mi_objeto.unbind(); // Desenlaza todas las funciones de todos los eventos

Generación de eventos: triggering

Un objeto también podrá disparar cualquier evento en cualquier momento haciendo uso de trigger(event, [*args]) a la que le indicaremos un nombre de evento y opcionalmente una cadena de parámetros que se pasarán como argumentos a la función callback enlazada:

mi_objeto.bind('mi_evento', function(arg1, arg2){
    alert('Evento que recibe 2 argumentos');
});
mi_objeto.trigger('mi_evento', 'primer argumento', 'segundo argumento');

mi_objeto.bind('mi_evento', function(arg1, arg2){ alert('Evento que recibe 2 argumentos'); }); mi_objeto.trigger('mi_evento', 'primer argumento', 'segundo argumento');

Resumen

En este tema hemos visto lo fácil que es dotar a nuestros objetos de la capacidad de generar y recibir eventos gracias a Backbone.Event.Como veremos, este mecanismo será ampliamente utilizado en el resto de componentes de Backbone.

En el siguiente tema analizaremos uno de los principales componentes de backbone: los Modelos.

  • Facebook
  • Twitter
  • Google+

Desarrollo Web backbonejs,  tutorial

Reader Interactions

Comments

  1. LpSys says

    6 noviembre, 2012 at 1:15 am

    :.:.:.:ExeLentE TuToriAl, GraCiAs:.:.:..

    Responder
  2. Patricio Barros says

    28 noviembre, 2012 at 8:40 pm

    Estimado, en el primer ejemplo falta una «s» a «Event», debe decir: Backbone.Events
    Estoy recién empezando con Backbone y quise seguir el ejemplo, pero no funcionó, revisé la documentación oficial y me di cuenta del error.
    Estoy siguiendo el tutorial, me parece extraordinario hasta ahora, y excelente para los hispanoparlantes ya que es de los pocos que he encontrado.

    Saludos

    Responder
    • Alfonso Marín says

      6 diciembre, 2012 at 10:10 am

      Gracias por la corrección. Me alegro que te guste el material. Un saludo

      Responder
  3. Jeeba says

    26 diciembre, 2012 at 8:44 pm

    Interesante el tutorial, se ve bien poderoso esta libreria, necesitaba algo parecido para un juego web que desarrollo y que si jquery me lo hubiera hecho facil hubiera necesitado hacer bastantes llamadas a eventos!

    Responder
  4. Ale Prieto says

    3 marzo, 2013 at 1:53 pm

    ¡gracias Alfonso!

    ¡excelente el tutorial!

    Responder
  5. jesus says

    21 abril, 2014 at 12:25 pm

    Genial!!
    muchísimas gracias poro tu tiempo!

    Responder
  6. Miguel says

    26 enero, 2016 at 9:18 pm

    Un poco corto de informacón, pero bien en particular

    Responder
  7. Fco.Javier says

    15 abril, 2016 at 3:31 pm

    Enhorabuena por tu dedicación

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

  • LinkedIn
  • RSS
  • Twitter
  • Aviso legal
  • Política de privacidad
  • Política de cookies
  • Contacto

Copyright ©2025 · Alfonso Marín Marín - Todos los derechos reservados ·

Usamos cookies para asegurar que te damos la mejor experiencia en nuestra web. Si continúas usando este sitio, asumiremos que estás de acuerdo con ello.Aceptar