在jQuery插件中,您认为哪种方式最好允许函数挂钩在插件中 - 通过插件函数传递的槽触发器或选项(参数)?
$.trigger('myplugin_completed', someData);
$(document).bind('myplugin_completed', function(event, someData){ ... });
VS
myPluginOptions.onComplete(someData);
$('.stuff').myPlugin({onComplete: function(someData){ ... }});
答案 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');
它们之间存在差异,但通常取决于具体情况,哪一个更好;