2011-12-23 10 views
13

Estoy escribiendo un componente del menú de pestañas usando backbone.js como un framework MVC. Cuando un usuario hace clic en una pestaña, el componente cambiará de pestaña (operación interna), pero me gustaría que los oyentes del componente respondan a la acción asociada con el evento. La idea detrás de esto es que estoy abstrayendo los diversos clics en acciones específicas. Por ejemplo, el modelo para cada pestaña es un hash con la siguiente estructura:Backbone.js - usando el disparador para disparar el evento y pasar datos

{ 
    label : <string>, 
    actionCommand : "save", 
    tabClass : <string> 
} 

El evento que se activará será llamado "acción", por lo que los oyentes responden a la "acción", pero serán luego enviadas por la específica mando. Por ejemplo:

this.trigger("action", {actionCommand: "save"}); 

El oyente a su vez podría controlar el evento de manera similar a lo siguiente:

handleAction : function(event) { 
    if (event.actionCommand == "save") { 
    ...do something... 
    } 

}

es esto posible? No pude obtener esto de la documentación. Gracias de antemano por cualquier información que pueda ofrecer.

Respuesta

30

Sí, eso es posible con Backbone.

Puede usar el módulo de Eventos para permitir a un objeto la capacidad de enlazar y activar eventos con nombre personalizado.

En su caso, querrá agregar el módulo Eventos a su objeto componente de menú. Si este objeto es un modelo de red troncal, entonces ya tiene el módulo de eventos. Si no es así, entonces usted puede agregarlo con el siguiente código

_.extend(MenuComponent, Backbone.Events); 

A continuación, sus oyentes pueden suscribirse como esto

MenuComponent.bind("action", this.handleAction, this); 

Y se puede desencadenar el evento como ya se ha mencionado

this.trigger("action", {actionCommand: "save"}); 
+0

Hermosa ! ¿Se copia el hash en el objeto del evento? –

+0

El hash se pasa a la devolución de llamada, en este caso handleAction – Paul

+0

¿Y qué tal pasar los datos ...? Esto es para pasar * acción * solamente ... –

Cuestiones relacionadas