2011-07-31 14 views
6

Recién comenzando con Dojo. Quiero pasar un par de parámetros personalizados a un controlador de eventos. En jQuery, puede hacerlo de esta manera:Dojo: cómo pasar parámetros personalizados al controlador de eventos

$('#button').click({ 
    customData: 'foo' 
}, handlerFunction); 

Y customData se puede acceder desde handlerFunction así:

function handlerFunction(event) { 
    console.log(event.data.customData); 
} 

estoy migrando un poco de código jQuery a Dojo. ¿Cómo puedo pasar esos parámetros al controlador de eventos Dojo?

Respuesta

12

Bueno, generaly, cierres permiten pasar parámetros "ocultos" a una función:

function make_event_handler(customData){ 
    return function(evt){ 
     //customData can be used here 
     //just like any other normal variable 
     console.log(customData); 
    } 
} 

Así que cuando se conecta un evento en el dojo:

dojo.connect(node, 'onclick', make_event_handler(17)); 

Otra posibilidad que me gusta mucho está usando dojo.partial/dojo.hitch para crear los cierres para usted.

function event_handler(customData, evt){ 
    /// 
} 

dojo.connect(node, 'onclick', dojo.partial(event_handler, 17)) 

Tenga en cuenta que todas estas estas requerida Sus manejadores de eventos que se creará con el paso del parámetro (s) extra en mente. No sé si puedes hacer una traducción más directa del código de JQuery, ya que eso requeriría un masaje adicional de la variable evt y no creo que Dojo lo haga.

+1

Aha, 'dojo.partial' es justo lo que estoy buscando. ¡Gracias! – Jonah

1

también:

this.connect(other, "onClick", function(e) { 
    /* other is accesible here still */ 
}); 

o:

this.connect(other, "onClick", dojo.hitch(this, "handler", other); 

y su controlador de eventos:

this.handler = function(other, evt){...} 
Cuestiones relacionadas