Agility.js documentation似乎很清楚Agility对象可以接受任何有效的jQuery事件类型:
支持通常的DOM事件,例如click,dblclick,mouseenter等 jQuery的事件API。有关支持的事件列表,请参阅jQuery的API。
但是在文档和我见过的所有其他示例中,绑定到事件的所有控制器函数都不带参数。例如,以下代码段直接取自the online docs:
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。
有没有办法声明我的控制器事件处理程序,以便我可以访问这些参数?或者,还有其他方法可以做我正在尝试做的事情吗?除了“它被解雇”之外,没有获得关于控制器上的事件的任何信息似乎是一个真正的缺点。我甚至不确定是否可以扩展Agility以便它可以处理除标准DOM之外的事件,尽管从我阅读代码中我看不出任何原因。
Agility确实为客户端代码提供trigger()
函数来触发事件,这允许除事件类型之外的参数。我想到了以某种方式连接到jQueryUI事件,但我没有看到如何。更重要的是,如果控制器无法看到参数,为什么甚至可以将参数传递给trigger()
?
答案 0 :(得分:1)
这个例子没有显示它是不幸的,但这并不意味着论证不存在。
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()
和额外的参数,你会发现那里也没有惊喜。