事件触发器与选项中的回调

时间:2012-01-22 16:04:38

标签: javascript jquery jquery-plugins

在jQuery插件中,您认为哪种方式最好允许函数挂钩在插件中 - 通过插件函数传递的槽触发器或选项(参数)?

$.trigger('myplugin_completed', someData);

$(document).bind('myplugin_completed', function(event, someData){ ... });

VS

myPluginOptions.onComplete(someData);

$('.stuff').myPlugin({onComplete: function(someData){ ... }});

3 个答案:

答案 0 :(得分:2)

我将投票支持第二个选项,因为这样可以控制onComplete事件,并且它仅绑定到元素。将它绑定到文档并不好,因为可以执行$(document).unbind(),解除所有事件的绑定。

答案 1 :(得分:2)

解决方案

我认为最好的解决方案 - 至少在您描述的情况下(可能不是在所有可能的情况下) - 是以下列方式组合两者:

$('.stuff').myPlugin(/* some options here */);
$('.stuff').trigger('myplugin.completed', someData);

和这一行:

$('.stuff').on('myplugin.completed', function(event, someData){
    /* callback code */
});

负责绑定事件处理程序。当初始化插件时有人在选项中传递onComplete回调时也可以调用它(当然,选择器应该调整为满足初始化你的pugin所使用的选项)。

摘要

总结一下,你可以:

  • 创建您自己的活动(completed),
  • 将此插件的命名空间用于此事件/插件(在本例中为myplugin),
  • 使用.on()函数(自jQuery 1.7起可用和首选),
  • 如果onComplete选项传递给你的插件,在初始化插件的代码中绑定它是没有问题的(所以从插件中,使用.on()函数,绑定事件处理程序到你的偶数命名空间中的事件名称。)

答案 2 :(得分:1)

我认为这两种方式都很好,而且没有一种方法比另一方方式更具优势。

例如,jQuery UI对实际事件(如开始/停止拖动)使用选项和事件触发器的回调。

但是,通过在代码中创建事件触发器,您可以创建更灵活的方式来添加更多事件处理程序,而无需修改现有代码。我的意思是当你有回调时,就是这样:

{onComplete: function(someData){ action_1; }}

如果您需要一些额外的操作,可以将它们写入existion函数或将函数放入其中:

{onComplete: function(){  action_1; action_2 }}

{onComplete: function(){  action_1; function_2(); }}

function_2(){ action_2 };

使用事件进行比较,就像:

$('selector').on('myplugin_completed.myplugin', function_1 })

额外行动:

$('selector').on('myplugin_completed.myplugin_extra', function_2 })

如果您不需要某些操作,则只能解除绑定。

$('selector').off('myplugin_completed.myplugin_extra');

它们之间存在差异,但通常取决于具体情况,哪一个更好;