2011-07-31 15 views
6

Po prostu zaczyna się od Dojo. Chcę przekazać kilka parametrów niestandardowych do obsługi zdarzenia. W jQuery, można zrobić to tak:Dojo: przekazywanie parametrów niestandardowych do obsługi zdarzeń

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

I customData można uzyskać z handlerFunction tak:

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

mam migracji kawałek kodu jQuery nad do Dojo. Jak mogę przekazać te parametry do obsługi zdarzenia Dojo?

Odpowiedz

12

No generaly, zamknięcia pozwalają przechodzić „ukryte” parametry do funkcji:

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

więc podczas łączenia zdarzenie w dojo:

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

Inną możliwością, że lubię dużo używa dojo.partial/dojo.hitch do tworzenia zamknięć dla ciebie.

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

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

pamiętać, że wszystkie z nich są obowiazkowe obsługi zdarzeń mają być utworzone z przechodzącej dodatkowy parametr (y) w umyśle. Nie wiem, czy można zrobić bardziej bezpośrednie tłumaczenie kodu JQuery, ponieważ wymagałoby to dodatkowego masowania zmiennej evt i nie sądzę, że dojo to robi.

+1

Aha, 'dojo.partial' jest tylko to, co szukam. Dzięki! – Jonah

1

również:

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

czyli

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

i jego obsługi zdarzenia:

this.handler = function(other, evt){...} 
Powiązane problemy