Dojo:如何将自定义参数传递给事件处理程序

时间:2011-07-31 23:35:28

标签: javascript javascript-events dojo

刚开始使用Dojo。我想将一些自定义参数传递给事件处理程序。在jQuery中,你可以这样做:

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

可以从customData访问handlerFunction,如下所示:

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

我正在将一些jQuery代码迁移到Dojo。如何将这些参数传递给Dojo事件处理程序?

2 个答案:

答案 0 :(得分:12)

嗯,通常,闭包允许您将“隐藏”参数传递给函数:

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

所以当在dojo中连接事件时:

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 :(得分:1)

另外:

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){...}