2013-05-03 80 views
1

Agility.js documentation似乎很清楚地说,敏捷的对象可以接受任何有效的jQuery的事件类型:Agility.js + jQueryUI的,参数传递给事件处理程序控制器

平时DOM事件,如点击,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事件显然是无参数的拉姆达。这对于普通的jQuery事件来说工作正常,但为了使用jQueryUI事件,每个事件函数都有相关的数据。例如,如果我想使用DraggableDroppable窗口小部件,则可以在Droppable上调用drop()函数来指示Draggable已经被放到它上面,并且我需要参数drop(event, ui)来确定它是哪个Draggable。

有什么办法来声明我的控制器事件处理程序,以便我可以访问这些参数?另外,还有其他方法可以做我想做的事吗?没有得到任何关于控制器以外的事件的信息,而不是“被解雇”似乎是一个真正的缺点。我甚至不确定是否可以扩展Agility,以便它可以处理除标准DOM之外的其他事件,尽管我从阅读代码时看不到任何理由。

敏捷确实提供了一个trigger()函数用于触发事件的客户端代码,它允许事件类型以外的参数。不知何故,我想到了jQueryUI事件的接线,但我没有看到如何。更重要的是,如果控制器无法看到它们,为什么甚至可以将参数传递给trigger()

回答

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()和额外的参数,你会发现那里也没有惊喜。

+1

谢谢,这工作正常!事实证明''事件'和'ui'参数传递给Agility控制器事件处理程序,因此连接jQueryUI小部件与普通的jQuery没有区别。 – dodgethesteamroller 2013-05-03 22:34:25

相关问题