jQuery UI _trigger与trigger的区别

10

我开发了一个jQuery UI插件,但不太清楚应该使用哪个方法。根据jQuery UI文档,我应该使用_trigger来触发事件,这样处理程序就可以像插件一样进行初始化。

$("#id").pluginname({ 
   click: function(){ 
      //called when clicked
   }
});

但是如果我后来想要附加更多的侦听器到这个事件上,我找不到任何方法来实现。 我尝试使用jQuery绑定(bind), 但那并不起作用。 例如:

$("#id").bind("click", function(){
    //This does not get fired on click if using _trigger
})

到目前为止,我唯一的解决方案是同时触发两个事件,但这感觉有点奇怪。 我的代码必须执行以下操作才能正常工作:

$("#id").pluginname({
  click: function(){
     //called when my plugin uses this._trigger('click')
  }
}).bind(function(){
    //called when my plugin uses this.element.trigger('click')
});

我正在使用自定义事件,但认为这与我的问题无关。有人知道如何在使用_trigger()时使用事件链接吗?

2个回答

10

你应该这样绑定:

$("#id").bind("pluginnameclick", function(){

你好,我无法让这个工作起来,你有任何参考文献或文档可以提供给我阅读以更好地理解吗? - Tommy
抱歉,我不记得了。 试试这个 - http://www.erichynds.com/jquery/tips-for-developing-jquery-ui-widgets/ (搜索“dialogopen”) - bullgare
6
你好,谢谢你的回答。幸运的是,我在一个页面上发现了一条评论,说事件名称被转换为小写。在这种情况下,我的示例没有捕获到我有一个驼峰命名的事件。不过这意味着你的建议是正确的。非常感谢您帮助我解决这个问题。 - Tommy
2
如果您的示例小部件名称采用驼峰式命名,我会指向它。您还可以像这样触发它:me.element.trigger('click.MyWidget')在这种情况下,您应该绑定:$("#id").bind("click.MyWidget", ... - bullgare

4
您应该使用 this._onthis._trigger 来实现,这样在销毁小部件时可以清除事件。否则,您必须自己解绑事件,否则浏览器的垃圾回收机制不会清理小部件。希望这回答了您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接