js + jQueryUI,将参数传递给控制器中的事件处理程序
Agility.js + jQueryUI, pass parameters to event handlers in controller
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()
和额外的参数,您将发现也没有什么令人惊讶的。
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- dropdown.js中的复杂事件处理
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 复选框,然后单击事件处理
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们
- EXTJS,无法将事件处理程序绑定到控制器
- 是视图中的事件处理程序或 MVC 应用程序中的控制器
- 事件处理程序在 Angular 控制器中停止工作
- Angular JS处理控制器事件
- Angular在自己的控制器中处理事件
- js + jQueryUI,将参数传递给控制器中的事件处理程序
- ASP.Net MVC处理控制器事件的最佳实践,该事件不返回视图,但在完成时弹出一个窗口
- Angular控制器的生命周期和事件处理