js + jQueryUI,将参数传递给控制器中的事件处理程序

Agility.js + jQueryUI, pass parameters to event handlers in controller

本文关键字:控制器 事件处理 程序 参数传递 jQueryUI js      更新时间:2023-09-26

agile .js文档似乎说得很清楚,agile对象可以接受任何有效的jQuery事件类型:

通过支持常见的DOM事件,如click, dblclick, mouseenter等jQuery的事件API。有关支持的事件列表,请参考jQuery的API。

但是在文档和我所见过的所有其他示例中,所有绑定到事件的控制器函数都不带参数。例如,下面的代码片段直接取自在线文档:

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', {
  'click &': function() {
    this.model.set({msg:"I've been clicked!"});
  }
});
$$.document.append(button);

这里附加到click事件的lambda显然是无参数的。对于普通的jQuery事件,这可以正常工作,但是要使用jQueryUI事件,每个事件函数都有关联的数据。例如,如果我想使用Draggable和Droppable小部件,则在Droppable上调用drop()函数,以指示Draggable已被拖放到其上,并且我需要drop(event, ui)的参数来确定它是哪个Draggable。

是否有任何方法来声明我的控制器事件处理程序,以便我可以访问这些参数?或者,有没有别的方法来做我想做的事?除了"it fired"之外,无法获得控制器上事件的任何信息,这似乎是一个真正的缺点。我甚至不确定是否有可能扩展Agility,这样它就可以处理标准DOM之外的事件,尽管从我对代码的阅读中,我看不出有什么理由不应该这样做。

Agility确实为客户端代码提供了一个trigger()函数来触发事件,它允许使用事件类型以外的参数。我想以某种方式将它连接到jQueryUI事件,但我不知道怎么做。更重要的是,如果控制器看不到参数,为什么你甚至可以将参数传递给trigger() ?

这个例子没有显示它是不幸的,但这并不意味着参数不存在。

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', {
  'click &': function(jqEvent) {
    this.model.set({msg:"I've been clicked!" + jqEvent.target.nodeName});
  }
});
$$.document.append(button);

当有疑问时,只需在事件处理程序中包含console.log(arguments),然后自己查看。您将获得与jQuery提供的相同的参数。

如果您尝试使用.trigger()和额外的参数,您将发现也没有什么令人惊讶的。