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

Posted

技术标签:

【中文标题】如何将自定义参数传递给事件处理程序【英文标题】:How to Pass Custom Parameters to Event Handler 【发布时间】:2011-07-31 23:35:28 【问题描述】:

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

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

customData 可以像这样从handlerFunction 访问:

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

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

【问题讨论】:

【参考方案1】:

嗯,一般来说,闭包允许您将“隐藏”参数传递给函数:

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 不会这样做。

【讨论】:

啊哈,dojo.partial 正是我要找的。谢谢!【参考方案2】:

还有:

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

【讨论】:

以上是关于如何将自定义参数传递给事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

是否存在某种方式将自定义参数传递给 Firebase 上的短动态链接?

将自定义参数传递给 Qt/C++ 中的插槽

将自定义参数传递给 uibutton #selector swift 3

将自定义启动参数传递给 detox

将额外参数传递给事件处理程序?

如何将自定义注释中的参数传递给库中的 WebSecurityConfigurer