Dojo: Как передать пользовательские параметры в обработчик событий - PullRequest
6 голосов
/ 01 августа 2011

Просто начинаю с Додзё. Я хочу передать пару пользовательских параметров в обработчик событий. В jQuery вы можете сделать это так:

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

И customData можно получить из handlerFunction, например:

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

Я перевожу немного кода jQuery в Dojo. Как я могу передать эти параметры обработчику событий Dojo?

Ответы [ 2 ]

12 голосов
/ 01 августа 2011

Ну, в общем, замыкания позволяют передавать «скрытые» параметры в функцию:

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

Итак, при подключении события в додзё:

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

Еще одна возможность, которая мне очень нравится, - это использование dojo.partial / dojo.hitch для создания замыканий для вас.

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

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

Обратите внимание, что все это требовало создания обработчиков событий с учетом дополнительных параметров. Я не знаю, можете ли вы сделать более прямой перевод кода JQuery, так как для этого потребуется дополнительный массаж переменной evt, и я не думаю, что dojo делает это.

1 голос
/ 25 января 2012

Также:

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

или:

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

и его обработчик события:

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