刚开始使用Dojo。我想将一些自定义参数传递给事件处理程序。在jQuery中,你可以这样做:
$('#button').click({
customData: 'foo'
}, handlerFunction);
可以从customData
访问handlerFunction
,如下所示:
function handlerFunction(event) {
console.log(event.data.customData);
}
我正在将一些jQuery代码迁移到Dojo。如何将这些参数传递给Dojo事件处理程序?
答案 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){...}