2012-07-10 8 views
6

A menudo tengo que vincular un controlador de eventos, así como ejecutar inmediatamente ese controlador en jQuery. Hasta la fecha, he estado utilizando este patrón de imitación de perezoso para mantener el código SECO:jQuery: ¿enlazar y ejecutar un único controlador?

$(...).bind('event', function() { 
    ... 
}).trigger('event'); 

Hoy Me picaron por esto, debido al hecho de que otras personas que manipulan ya se habían unido a event, y eran también se ejecutó cuando activé el evento de esta forma, pero causé muchos problemas, ya que se suponía que no debían haberse ejecutado en ese momento.

Para resolver el problema, he cambiado el patrón a esto:

var handler = function() { 
    ... 
}; 

var element = $(...); 

element.bind('event', handler); 
handler.call(element); 

Esto funciona de la manera en que yo esperaba, pero es feo como el pecado y bastante detallado, así que estoy teniendo en cuenta que encapsula este patrón en un plugin de jQuery:

$(...).bindAndExecute('event', function() { ... }); 

he podido encontrar ningún equivalente para esto en jQuery.bind() opciones o cualquiera de los otros métodos, pero que puede haber perdido algo. ¿Hay una manera más concisa de hacer esto en la que no he pensado? No quiero reinventar la rueda.

Respuesta

3

jQuery admite namespacing your events. Esta es una técnica muy útil y resulta muy útil cuando desea desenlazar o desencadenar un grupo específico de eventos.

$(...).bind('event.myNamespace', function() { 
    ... 
}).trigger('event.myNamespace'); 

Usando esta técnica es casi inevitable (o al menos sensata gente no va a evitarlo) cuando esté desarrollando aplicaciones más grandes o plugins jQuery.

Quick jsFiddle Demo

+0

No entiendo esta sugerencia. ¿Podrías explicar? – FtDRbwLXw6

+0

No estoy usando eventos personalizados, por lo que no estoy seguro de cómo esto se aplica a mi situación. Gracias por cualquier ayuda que pueda ofrecer. – FtDRbwLXw6

+0

@drrcknlsn, también puede nombrar eventos "estándar". –

Cuestiones relacionadas